math::combinatorics -
Combinatorial functions in the Tcl Math Library
package require Tcl 8.2
package require math ? 1.2.3 ?
::math::ln_Gamma z
::math::factorial x
::math::choose n k
::math::Beta z w
The math package contains implementations of several
functions useful in combinatorial problems.
-
::math::ln_Gamma z
-
Returns the natural logarithm of the Gamma function for the argument
z.
The Gamma function is defined as the improper integral from zero to
positive infinity of
t**(x-1)*exp(-t) dt
The approximation used in the Tcl Math Library is from Lanczos,
ISIAM J. Numerical Analysis, series B, volume 1, p. 86.
For "x > 1", the absolute error of the result is claimed to be
smaller than 5.5*10**-10 -- that is, the resulting value of Gamma when
exp( ln_Gamma( x) )
is computed is expected to be precise to better than nine significant
figures.
-
::math::factorial x
-
Returns the factorial of the argument x.
For integer x, 0 <= x <= 12, an exact integer result is
returned.
For integer x, 13 <= x <= 21, an exact floating-point
result is returned on machines with IEEE floating point.
For integer x, 22 <= x <= 170, the result is exact to 1
ULP.
For real x, x >= 0, the result is approximated by
computing Gamma(x+1) using the ::math::ln_Gamma
function, and the result is expected to be precise to better than nine
significant figures.
It is an error to present x <= -1 or x > 170, or a value
of x that is not numeric.
-
::math::choose n k
-
Returns the binomial coefficient C(n, k)
C(n,k) = n! / k! (n-k)!
If both parameters are integers and the result fits in 32 bits, the
result is rounded to an integer.
Integer results are exact up to at least n = 34. Floating point
results are precise to better than nine significant figures.
-
::math::Beta z w
-
Returns the Beta function of the parameters z and w.
Beta(z,w) = Beta(w,z) = Gamma(z) * Gamma(w) / Gamma(z+w)
Results are returned as a floating point number precise to better than
nine significant digits provided that w and z are both at
least 1.
This document, and the package it describes, will undoubtedly contain
bugs and other problems.
Please report such in the category
math of the
http://sourceforge.net/tracker/?group_id=12883.
Please also report any ideas for enhancements you may have for either
package and/or documentation.