Skip to content

Latest commit

 

History

History

Binomial Coefficient

Compute the binomial coefficient.

The binomial coefficient of two nonnegative integers n and k is defined as

$$\binom {n}{k} = \frac{n!}{k!\,(n-k)!} \quad \text{for }\ 0\leq k\leq n$$

The binomial coefficient can be generalized to negative integers n as follows:

$$\binom {-n}{k} = (-1)^{k} \binom{n + k - 1}{k} = (-1)^{k} \left(\!\!{\binom {n}{k}}\!\!\right)$$

Usage

var binomcoef = require( '@stdlib/math/base/special/binomcoef' );

binomcoef( n, k )

Evaluates the binomial coefficient of two integers n and k.

var v = binomcoef( 8, 2 );
// returns 28

v = binomcoef( 0, 0 );
// returns 1

v = binomcoef( -4, 2 );
// returns 10

v = binomcoef( 5, 3 );
// returns 10

v = binomcoef( NaN, 3 );
// returns NaN

v = binomcoef( 5, NaN );
// returns NaN

v = binomcoef( NaN, NaN );
// returns NaN

For negative k, the function returns 0.

var v = binomcoef( 2, -1 );
// returns 0

v = binomcoef( -3, -1 );
// returns 0

The function returns NaN for non-integer n or k.

var v = binomcoef( 2, 1.5 );
// returns NaN

v = binomcoef( 5.5, 2 );
// returns NaN

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var logEachMap = require( '@stdlib/console/log-each-map' );
var binomcoef = require( '@stdlib/math/base/special/binomcoef' );

var opts = {
    'dtype': 'float64'
};
var n = discreteUniform( 100, -10, 30, opts );
var k = discreteUniform( 100, 0, 20, opts );

logEachMap( '%d choose %d = %d', n, k, binomcoef );

C APIs

Usage

#include "stdlib/math/base/special/binomcoef.h"

stdlib_base_binomcoef( n, k )

Evaluates the binomial coefficient of two integers n and k.

double v = stdlib_base_binomcoef( 8, 2 );
// returns 28.0

The function accepts the following arguments:

  • n: [in] int64_t input value.
  • k: [in] int64_t input value.
double stdlib_base_binomcoef( const int64_t n, const int64_t k );

Examples

#include "stdlib/math/base/special/binomcoef.h"
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main( void ) {
    const int64_t a[] = { 24, 32, 48, 116, 33 };
    const int64_t b[] = { 12, 6, 15, 52, 22 };

    double out;
    int i;
    for ( i = 0; i < 5; i++ ) {
        out = stdlib_base_binomcoef( a[ i ], b[ i ] );
        printf( "binomcoef(%" PRId64 ", %" PRId64 ") = %lf\n", a[ i ], b[ i ], out );
    }
}