From ea880ec267d96ee136a29ae7e18847ec839ad016 Mon Sep 17 00:00:00 2001 From: Vladimir Chalupecky Date: Wed, 19 Apr 2017 20:30:22 +0200 Subject: [PATCH] stat/combin: avoid overflow in Binomial Fixes #174 --- combin/combin.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/combin/combin.go b/combin/combin.go index ae1b4a0..4dba68f 100644 --- a/combin/combin.go +++ b/combin/combin.go @@ -35,15 +35,11 @@ func Binomial(n, k int) int { if k > n/2 { k = n - k } - kfact := 1 - for i := 2; i <= k; i++ { - kfact *= i + b := 1 + for i := 1; i <= k; i++ { + b = (n - k + i) * b / i } - num := 1 - for i := n; i > n-k; i-- { - num *= i - } - return num / kfact + return b } // GeneralizedBinomial returns the generalized binomial coefficient of (n, k),