combinatorics - Tcl Math Library

# combinatorics(n) 4.2 math "Tcl Math Library"

## NAME

combinatorics - Combinatorial functions in the Tcl Math Library

## SYNOPSIS

package require Tcl 8.2
package require math ?1.2?

::math::ln_Gamma z
::math::factorial x
::math::choose n k
::math::Beta z w

## DESCRIPTION

The math package contains implementations of several functions useful in combinatorial problems.

## COMMANDS

::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 &quot;x &gt; 1&quot;, 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 &lt;= x &lt;= 12, an exact integer result is returned.
  For integer x, 13 &lt;= x &lt;= 21, an exact floating-point result is returned on machines with IEEE floating point.
  For integer x, 22 &lt;= x &lt;= 170, the result is exact to 1 ULP.
  For real x, x &gt;= 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 &lt;= -1 or x &gt; 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.