\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 17.714642954298647:\\
\;\;\;\;\frac{\frac{{b}^{2} - \left({b}^{2} - \left(3 \cdot a\right) \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r89325 = b;
double r89326 = -r89325;
double r89327 = r89325 * r89325;
double r89328 = 3.0;
double r89329 = a;
double r89330 = r89328 * r89329;
double r89331 = c;
double r89332 = r89330 * r89331;
double r89333 = r89327 - r89332;
double r89334 = sqrt(r89333);
double r89335 = r89326 + r89334;
double r89336 = r89335 / r89330;
return r89336;
}
double f(double a, double b, double c) {
double r89337 = b;
double r89338 = 17.714642954298647;
bool r89339 = r89337 <= r89338;
double r89340 = 2.0;
double r89341 = pow(r89337, r89340);
double r89342 = 3.0;
double r89343 = a;
double r89344 = r89342 * r89343;
double r89345 = c;
double r89346 = r89344 * r89345;
double r89347 = r89341 - r89346;
double r89348 = r89341 - r89347;
double r89349 = -r89337;
double r89350 = r89337 * r89337;
double r89351 = r89350 - r89346;
double r89352 = sqrt(r89351);
double r89353 = r89349 - r89352;
double r89354 = r89348 / r89353;
double r89355 = r89354 / r89344;
double r89356 = -0.5;
double r89357 = r89345 / r89337;
double r89358 = r89356 * r89357;
double r89359 = r89339 ? r89355 : r89358;
return r89359;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 17.714642954298647Initial program 14.0
rmApplied flip-+14.0
Simplified13.0
if 17.714642954298647 < b Initial program 33.6
Taylor expanded around inf 18.4
Final simplification17.1
herbie shell --seed 2020046
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))