From e2fe7b25c78d9299dbb4149a588b361afed50635 Mon Sep 17 00:00:00 2001 From: harshkanhat Date: Wed, 28 Oct 2026 17:58:58 +0530 Subject: [PATCH] Fix binomial distribution overflow --- maths/binomial_distribution.py | 7 ++----- maths/test_binomial_distribution.py | 8 ++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 maths/test_binomial_distribution.py diff --git a/maths/binomial_distribution.py b/maths/binomial_distribution.py index e29c8597a6e5..6b069461394e 100644 --- a/maths/binomial_distribution.py +++ b/maths/binomial_distribution.py @@ -1,8 +1,7 @@ """For more information about the Binomial Distribution - https://en.wikipedia.org/wiki/Binomial_distribution""" -from math import factorial - +from math import comb def binomial_distribution(successes: int, trials: int, prob: float) -> float: """ @@ -26,9 +25,7 @@ def binomial_distribution(successes: int, trials: int, prob: float) -> float: if not 0 < prob < 1: raise ValueError("prob has to be in range of 1 - 0") probability = (prob**successes) * ((1 - prob) ** (trials - successes)) - # Calculate the binomial coefficient: n! / k!(n-k)! - coefficient = float(factorial(trials)) - coefficient /= factorial(successes) * factorial(trials - successes) + coefficient = comb(trials, successes) return probability * coefficient diff --git a/maths/test_binomial_distribution.py b/maths/test_binomial_distribution.py new file mode 100644 index 000000000000..4330c4286fce --- /dev/null +++ b/maths/test_binomial_distribution.py @@ -0,0 +1,8 @@ + +import pytest +from maths.binomial_distribution import binomial_distribution + +def test_large_number_of_trials() -> None: + assert binomial_distribution(85, 171, 0.5) == pytest.approx( + 0.060749764626165485 + )