diff --git a/include/boost/math/distributions/binomial.hpp b/include/boost/math/distributions/binomial.hpp index 02991e1b4..2551ccb06 100644 --- a/include/boost/math/distributions/binomial.hpp +++ b/include/boost/math/distributions/binomial.hpp @@ -483,11 +483,6 @@ namespace boost { return 1; // Probability = 1 = certainty. } - if (k == 0) - { // binomial coeffic (n 0) = 1, - // n ^ 0 = 1 - return pow(1 - dist.success_fraction(), n); - } if (k == n) { // binomial coeffic (n n) = 1, // n ^ 0 = 1 diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 1a555a3fc..9ab16b3da 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -892,6 +892,7 @@ test-suite distribution_tests : [ compile test_dist_deduction_guides.cpp : [ requires cpp_deduction_guides cpp_variadic_templates ] ] [ run git_issue_800.cpp ../../test/build//boost_unit_test_framework ] [ run git_issue_845.cpp ../../test/build//boost_unit_test_framework ] + [ run scipy_issue_17146.cpp ../../test/build//boost_unit_test_framework ] ; test-suite mp : diff --git a/test/scipy_issue_17146.cpp b/test/scipy_issue_17146.cpp new file mode 100644 index 000000000..b14d8b0f2 --- /dev/null +++ b/test/scipy_issue_17146.cpp @@ -0,0 +1,28 @@ +// Copyright Matt Borland, 2022 +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include "math_unit_test.hpp" + +int main() +{ + constexpr double n {1541096362225563.0}; + constexpr double p {1.0477878413173978e-18}; + const auto binom_dist = boost::math::binomial_distribution(n, p); + std::array vals {}; + + for (size_t i = 0; i < 2; ++i) + { + vals[i] = boost::math::pdf(binom_dist, i); + } + + CHECK_ULP_CLOSE(vals[0], 0.9983865609638467, 10); + + CHECK_LE(std::accumulate(vals.begin(), vals.end(), 0.0), 1.0); + + return boost::math::test::report_errors(); +}