if (p > 0) q = -q; else p = -p; s = e; e = d; if (2 * p < 3 * m*q - |tol*q| && p < |0.5*s*q|) d = p / q; else d = e = m; //bisekcja
a = b; fa = fb; if (|d| > tol) dtol = d; else if (m > 0) dtol = tol; else dtol = -tol; b = b + dtol; wylicz fb = f(b); if (!DIFFSIGN(fb, fc))
c = a; fc = fa; d = e = b - a;
else break;
return b;
Powyższy algorytm nie sprawdza, czy wewnątrz przedziału występuje miejsce zerowe, zatem należy upewnić się co do tego przed jego uruchomieniem.
Natomiast, jeśli miejsc zerowych jest kilka, podawane jest tylko jedno z nich.
Przykład Dla funkcji na [3,01; 4]: a1 = 3,010000000000, b1 = 4,000000000000, c1 = 3,010000000000 a2 = 4,000000000000, b2 = 3,950000000000, c2 = 3,010000000000 a3 = 3,950000000000, b3 = 3,480000000000, c3 = 3,010000000000 a4 = 3,480000000000, b4 = 3,245000000000, c4 = 3,010000000000 a5 = 3,245000000000, b5 = 3,127500000000, c5 = 3,245000000000 a6 = 3,127500000000, b6 = 3,185075000000, c6 = 3,127500000000 a7 = 3,185075000000, b7 = 3,170992625000, c7 = 3,127500000000 a8 = 3,170992625000, b8 = 3,166554383174, c8 = 3,170992625000 a9 = 3,166554383174, b9 = 3,166669581069, c9 = 3,166554383174 a10 = 3,166669581069, b10 = 3,166666668630, c10 = 3,166554383174 a11 = 3,166666668630, b11 = 3,166666666667, c11 = 3,166666668630 a12 = 3,166666666667, b12 =