diff --git a/apps/regression/model/model.cpp b/apps/regression/model/model.cpp index d01473e7c..7f06a3667 100644 --- a/apps/regression/model/model.cpp +++ b/apps/regression/model/model.cpp @@ -105,8 +105,8 @@ double Model::alphaPrimeCoefficient(Store * store, int series, double * modelCoe double result = 0.0; if (k == l) { result = alphaCoefficient(store, series, modelCoefficients, k, l)*(1.0+lambda); - if (result == 0) { - result = lambda; + if (std::fabs(result) < Expression::epsilon()) { + result = 2*Expression::epsilon(); } } else { result = alphaCoefficient(store, series, modelCoefficients, l, k); diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 90cc058fa..cf77d1cf0 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -274,6 +274,9 @@ public: Coordinate2D nextMaximum(char symbol, double start, double step, double max, Context & context) const; double nextRoot(char symbol, double start, double step, double max, Context & context) const; Coordinate2D nextIntersection(char symbol, double start, double step, double max, Context & context, const Expression * expression) const; + + /* Evaluation engine */ + template static T epsilon(); protected: /* Constructor */ Expression() : m_parent(nullptr) {} @@ -282,7 +285,6 @@ protected: /* Evaluation Engine */ typedef float SinglePrecision; typedef double DoublePrecision; - template static T epsilon(); constexpr static int k_maxNumberOfSteps = 10000; /* Simplification */