# combinatorics man page

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.

## Category

Mathematics