From db4cfb17631ea31f88720bf53552082492fb97dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 5 Sep 2019 13:26:48 +0200 Subject: [PATCH] [poincare] Solver: increase IncreasingFunctionRoot precision --- apps/probability/distribution/distribution.cpp | 4 +--- poincare/include/poincare/solver.h | 2 +- poincare/src/solver.cpp | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/probability/distribution/distribution.cpp b/apps/probability/distribution/distribution.cpp index 552d0c731..b51626cdb 100644 --- a/apps/probability/distribution/distribution.cpp +++ b/apps/probability/distribution/distribution.cpp @@ -111,12 +111,10 @@ double Distribution::cumulativeDistributiveInverseForProbabilityUsingIncreasingF if (*probability <= 0.0) { return -INFINITY; } - double valuePrecision = FLT_EPSILON; Poincare::Coordinate2D result = Poincare::Solver::IncreasingFunctionRoot( ax, bx, DBL_EPSILON, - valuePrecision, [](double x, Poincare::Context * context, Poincare::Preferences::ComplexFormat complexFormat, Poincare::Preferences::AngleUnit angleUnit, const void * context1, const void * context2, const void * context3) { const Distribution * distribution = reinterpret_cast(context1); const double * proba = reinterpret_cast(context2); @@ -130,7 +128,7 @@ double Distribution::cumulativeDistributiveInverseForProbabilityUsingIncreasingF nullptr); /* Either no result was found, the precision is ok or the result was outside * the given ax bx bounds */ - assert(std::isnan(result.x2()) || std::fabs(result.x2()) < valuePrecision || result.x1() == ax); + assert(std::isnan(result.x2()) || std::fabs(result.x2()) <= DBL_EPSILON || result.x1() == ax); return result.x1(); } diff --git a/poincare/include/poincare/solver.h b/poincare/include/poincare/solver.h index 776c28654..5c91134e9 100644 --- a/poincare/include/poincare/solver.h +++ b/poincare/include/poincare/solver.h @@ -15,7 +15,7 @@ public: // Root static double BrentRoot(double ax, double bx, double precision, ValueAtAbscissa evaluation, Context * context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, const void * context1 = nullptr, const void * context2 = nullptr, const void * context3 = nullptr); - static Coordinate2D IncreasingFunctionRoot(double ax, double bx, double resultPrecision, double valuePrecision, ValueAtAbscissa evaluation, Context * context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, const void * context1 = nullptr, const void * context2 = nullptr, const void * context3 = nullptr, double * resultEvaluation = nullptr); + static Coordinate2D IncreasingFunctionRoot(double ax, double bx, double resultPrecision, ValueAtAbscissa evaluation, Context * context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, const void * context1 = nullptr, const void * context2 = nullptr, const void * context3 = nullptr, double * resultEvaluation = nullptr); // Proba diff --git a/poincare/src/solver.cpp b/poincare/src/solver.cpp index eb476071c..d78b1e5bf 100644 --- a/poincare/src/solver.cpp +++ b/poincare/src/solver.cpp @@ -176,7 +176,7 @@ double Solver::BrentRoot(double ax, double bx, double precision, ValueAtAbscissa } -Coordinate2D Solver::IncreasingFunctionRoot(double ax, double bx, double resultPrecision, double valuePrecision, ValueAtAbscissa evaluation, Context * context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, const void * context1, const void * context2, const void * context3, double * resultEvaluation) { +Coordinate2D Solver::IncreasingFunctionRoot(double ax, double bx, double resultPrecision, ValueAtAbscissa evaluation, Context * context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, const void * context1, const void * context2, const void * context3, double * resultEvaluation) { assert(ax < bx); double min = ax; double max = bx;