diff --git a/poincare/src/integral.cpp b/poincare/src/integral.cpp index d81949521..580b56f54 100644 --- a/poincare/src/integral.cpp +++ b/poincare/src/integral.cpp @@ -171,14 +171,14 @@ template T Integral::adaptiveQuadrature(T a, T b, T eps, int numberOfIterations, VariableContext xContext, AngleUnit angleUnit) const { DetailedResult quadKG = kronrodGaussQuadrature(a, b, xContext, angleUnit); T result = quadKG.integral; - if (numberOfIterations < k_maxNumberOfIterations && quadKG.absoluteError > eps) { + if (quadKG.absoluteError <= eps) { + return result; + } else if (--numberOfIterations > 0) { T m = (a+b)/2; - result = adaptiveQuadrature(a, m, eps/2, numberOfIterations+1, xContext, angleUnit) + adaptiveQuadrature(m, b, eps/2, numberOfIterations+1, xContext, angleUnit); - } - if (quadKG.absoluteError > eps) { + return adaptiveQuadrature(a, m, eps/2, numberOfIterations, xContext, angleUnit) + adaptiveQuadrature(m, b, eps/2, numberOfIterations, xContext, angleUnit); + } else { return NAN; } - return result; } #endif