From 61a66f56d4c0b319aa389dfdfd65fb3865d6126f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Mon, 26 Aug 2019 10:14:00 +0200 Subject: [PATCH] [apps/proba] Check value is ok before computing --- .../probability/calculation/left_integral_calculation.cpp | 8 +++++--- .../calculation/right_integral_calculation.cpp | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/probability/calculation/left_integral_calculation.cpp b/apps/probability/calculation/left_integral_calculation.cpp index a08d402c6..7af5ff214 100644 --- a/apps/probability/calculation/left_integral_calculation.cpp +++ b/apps/probability/calculation/left_integral_calculation.cpp @@ -47,9 +47,11 @@ void LeftIntegralCalculation::compute(int indexKnownElement) { if (indexKnownElement == 0) { m_result = m_distribution->cumulativeDistributiveFunctionAtAbscissa(m_upperBound); } else { - double currentResult = m_distribution->cumulativeDistributiveFunctionAtAbscissa(m_upperBound); - if (std::fabs(currentResult - m_result) < std::pow(10.0, - Poincare::Preferences::LargeNumberOfSignificantDigits)) { - return; + if (!std::isnan(m_upperBound)) { + double currentResult = m_distribution->cumulativeDistributiveFunctionAtAbscissa(m_upperBound); + if (std::fabs(currentResult - m_result) < std::pow(10.0, - Poincare::Preferences::LargeNumberOfSignificantDigits)) { + return; + } } m_upperBound = m_distribution->cumulativeDistributiveInverseForProbability(&m_result); if (std::isnan(m_upperBound)) { diff --git a/apps/probability/calculation/right_integral_calculation.cpp b/apps/probability/calculation/right_integral_calculation.cpp index 9fc8bdea4..5e7160606 100644 --- a/apps/probability/calculation/right_integral_calculation.cpp +++ b/apps/probability/calculation/right_integral_calculation.cpp @@ -47,9 +47,11 @@ void RightIntegralCalculation::compute(int indexKnownElement) { if (indexKnownElement == 0) { m_result = m_distribution->rightIntegralFromAbscissa(m_lowerBound); } else { - double currentResult = m_distribution->rightIntegralFromAbscissa(m_lowerBound); - if (std::fabs(currentResult - m_result) < std::pow(10.0, - Poincare::Preferences::LargeNumberOfSignificantDigits)) { - return; + if (m_distribution->authorizedValueAtIndex(m_lowerBound, 0)) { + double currentResult = m_distribution->rightIntegralFromAbscissa(m_lowerBound); + if (std::fabs(currentResult - m_result) < std::pow(10.0, - Poincare::Preferences::LargeNumberOfSignificantDigits)) { + return; + } } m_lowerBound = m_distribution->rightIntegralInverseForProbability(&m_result); if (std::isnan(m_lowerBound)) {