From e973194d5551791aea9ffd26c2014d08331e59ce Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Sat, 18 Jul 2015 16:41:28 +0100 Subject: [PATCH] Fix some corner cases in the non-central distros. --- include/boost/math/distributions/non_central_beta.hpp | 6 +++++- include/boost/math/distributions/non_central_t.hpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/boost/math/distributions/non_central_beta.hpp b/include/boost/math/distributions/non_central_beta.hpp index 6e699e509..aa66ecec0 100644 --- a/include/boost/math/distributions/non_central_beta.hpp +++ b/include/boost/math/distributions/non_central_beta.hpp @@ -515,7 +515,11 @@ namespace boost T non_central_beta_pdf(T a, T b, T lam, T x, T y, const Policy& pol) { BOOST_MATH_STD_USING - using namespace boost::math; + // + // Special cases: + // + if((x == 0) || (y == 0)) + return 0; // // Variables come first: // diff --git a/include/boost/math/distributions/non_central_t.hpp b/include/boost/math/distributions/non_central_t.hpp index df7a58e57..24605b3ad 100644 --- a/include/boost/math/distributions/non_central_t.hpp +++ b/include/boost/math/distributions/non_central_t.hpp @@ -90,7 +90,7 @@ namespace boost betaf -= xtermf; T term = poisf * betaf; sum += term; - if((fabs(last_term) > fabs(term)) && (fabs(term/sum) < errtol)) + if((fabs(last_term) >= fabs(term)) && (fabs(term/sum) < errtol)) break; last_term = term; ++count;