28VGlobal::binomialCoeff( unsigned n, unsigned k )
36 factorialLn( n - k ) ) );
40VGlobal::factorialLn( unsigned n )
42 const unsigned cacheSize = 100;
45 static double cache[ cacheSize ];
51 if( n <= cacheSize - 1 )
55 : ( cache[ n ] = gammaLn( n + 1.0 ) );
59 return gammaLn( n + 1.0 );
64VGlobal::gammaLn( double x )
66 static double coeff[ 6 ] =
72 0.1208650973866179e-2,
79 tmp -= ( x + 0.5 ) * log( tmp );
81 double ser = 1.000000000190015;
83 for( int i = 0; i < 5; ++i )
85 ser += coeff[ i ] / ++y;
88 return -tmp + log( 2.5066282746310005 * ser / x );
|