# Numerical Beta Function

Anyone know a fast and concise way of calculating the Beta $B(a,b)$ function for smallish (<10) real $a$ and $b$.

For integer $a$ and $b$ I have:

$B(a,b) = \prod\limits_{j=1}^b \frac{j}{a+j}$

which has tiny code and is also pretty fast. I've see some methods that rely on the Gamma or log Gamma function:

$\log B(a,b) = \log \Gamma(a) + \log \Gamma(b) - \log \Gamma(a+b)$

using approximations of $\log \Gamma$, but I was wondering if there was a more direct way.

-
"Numerical Recipes in C" (highly recommended) says to use the Gamma function. –  Stopple Aug 2 '11 at 18:12
I beg to differ: Numerical recipes in C is one of the banes of human existence, and has led to many, many bad implementations being used. –  Igor Rivin Aug 2 '11 at 18:20
try out: netlib.org/slatec esp. netlib.org/slatec/src/dgamln.f –  Suvrit Aug 2 '11 at 18:35
Fortran eugh. ;) –  Lucas Aug 2 '11 at 19:33
Good idea Suvrit. Looking at source now. I'm sure Fortran is pretty damn efficient, it's just that I'm not really familiar with it, mainly because I find it ugly. From a practical point of view I'm sure it's great. –  Lucas Aug 2 '11 at 22:09

There's nothing more straightforward than using the gamma function relationship, I believe (perhaps using Lanczos's approximation to compute the gamma functions). Of course, for integer arguments, the product representation is much faster. You could probably also consider the special case when one of the beta function's arguments is a semi-integer, and accordingly construct the appropriate product representation (involving $\sqrt{\pi}$).