## table of contents

math::combinatorics(3tcl) | Tcl Math Library | math::combinatorics(3tcl) |

# NAME¶

math::combinatorics - Combinatorial functions in the Tcl Math Library

# SYNOPSIS¶

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*

# 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
"**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.

# BUGS, IDEAS, FEEDBACK¶

This document, and the package it describes, will undoubtedly
contain bugs and other problems. Please report such in the category
*math* of the *Tcllib Trackers*
[http://core.tcl.tk/tcllib/reportlist]. Please also report any ideas for
enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*,
i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over
inlined patches. Attachments can be made by going to the **Edit** form of
the ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.

# CATEGORY¶

Mathematics

1.2.3 | tcllib |