\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\left(3 \cdot a\right) \cdot \frac{\frac{\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3}}{a}double f(double a, double b, double c) {
double r98528 = b;
double r98529 = -r98528;
double r98530 = r98528 * r98528;
double r98531 = 3.0;
double r98532 = a;
double r98533 = r98531 * r98532;
double r98534 = c;
double r98535 = r98533 * r98534;
double r98536 = r98530 - r98535;
double r98537 = sqrt(r98536);
double r98538 = r98529 + r98537;
double r98539 = r98538 / r98533;
return r98539;
}
double f(double a, double b, double c) {
double r98540 = 3.0;
double r98541 = a;
double r98542 = r98540 * r98541;
double r98543 = c;
double r98544 = b;
double r98545 = -r98544;
double r98546 = r98544 * r98544;
double r98547 = r98542 * r98543;
double r98548 = r98546 - r98547;
double r98549 = sqrt(r98548);
double r98550 = r98545 - r98549;
double r98551 = r98543 / r98550;
double r98552 = r98551 / r98540;
double r98553 = r98552 / r98541;
double r98554 = r98542 * r98553;
return r98554;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.6
rmApplied associate-/r*0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied times-frac0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019325
(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)))