Statistics in Deal

One can, of course, implement statistical functions in pure Tcl, but the number crunching of Tcl is not particularly fast, so I've implemented two methods in C which do some rudimentary statistics.

The two procedures are sdev and correlate.

The sdev declaration

The call:
sdev fitstats
defines a new procedure, fitstats, which is used to accumulate data. After it is defined, we can add data to it:
fitstats add 4
fitstats add 5
fitstats add 6
Then we can dump the data with:
set average [fitstats average]
set deviation [fitstats sdev]
In Deal 3.1 you might write:
# Determine the avearge spade length of north if south has
# five spades.

# Use "format/none" because we are not interested in specific
# deals.
source format/none

# Declare the statistical collector
sdev fitstats

main {
  reject unless {[spades south]==5}

  fitstats add [spades north]

deal_finished {
  puts "Count=[fitstats count]"
  puts "Average=[fitstats average]"
  puts "Deviation=[fitstats sdev]"
The code in deal_finished is executed once, after the appropriate set of deals are generated. Saving this code to the file "fit.tcl" we can run it:
\deal30> deal -i fit.tcl 100000

The correlation declaration

The correlation declaration defines a routine much like the sdev correlation. It computes the linear correlation between two data bits. In tclsh, with iDeal:
% correlation baz
% baz add 10 20
% baz add 20 30
% baz add 30 40
% baz add 40 50
% baz correlate

Silhouette Thomas Andrews ( Copyright 1996-2010. Deal is covered by the GNU General Public License.

Plane Dealing graphic above created using POV-Ray.