diff --git a/poincare/src/normal_distribution.cpp b/poincare/src/normal_distribution.cpp index ba62b1dca..710dfacb8 100644 --- a/poincare/src/normal_distribution.cpp +++ b/poincare/src/normal_distribution.cpp @@ -88,8 +88,8 @@ T NormalDistribution::StandardNormalCumulativeDistributiveFunctionAtAbscissa(T a if (std::isnan(abscissa)) { return NAN; } - if (std::isinf(abscissa) || abscissa > k_boundStandardNormalDistribution) { - return (T)1.0; + if (std::isinf(abscissa) || std::fabs(abscissa) > k_boundStandardNormalDistribution) { + return abscissa > (T)0.0 ? (T)1.0 : (T)0.0; } if (abscissa == (T)0.0) { return (T)0.5; diff --git a/poincare/test/approximation.cpp b/poincare/test/approximation.cpp index d985b1c8e..ee3d66795 100644 --- a/poincare/test/approximation.cpp +++ b/poincare/test/approximation.cpp @@ -303,6 +303,10 @@ QUIZ_CASE(poincare_approximation_function) { assert_expression_approximates_to("normcdf(1.2, 3.4, 31.36)", "0.3472125"); assert_expression_approximates_to("normcdf(1.2, 3.4, 31.36)", "3.4721249841587ᴇ-1"); + assert_expression_approximates_to("normcdf(-1ᴇ99,3.4,31.36)", "0"); + assert_expression_approximates_to("normcdf(1ᴇ99,3.4,31.36)", "1"); + assert_expression_approximates_to("normcdf(-6,0,1)", "0"); + assert_expression_approximates_to("normcdf(6,0,1)", "1"); assert_expression_approximates_to("normcdf2(0.5, 3.6, 1.3, 11.56)", "0.3436388"); assert_expression_approximates_to("normcdf2(0.5, 3.6, 1.3, 11.56)", "3.4363881299147ᴇ-1");