From 061fe05b404e3873d0f7db8085e696c9dfe227f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 28 Apr 2020 11:11:38 +0200 Subject: [PATCH] [poincare/normal_distribution] Fix StandardNormalCumulDistFuncAtAbs --- poincare/src/normal_distribution.cpp | 4 ++-- poincare/test/approximation.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) 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");