\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r99551 = b;
double r99552 = -r99551;
double r99553 = r99551 * r99551;
double r99554 = 3.0;
double r99555 = a;
double r99556 = r99554 * r99555;
double r99557 = c;
double r99558 = r99556 * r99557;
double r99559 = r99553 - r99558;
double r99560 = sqrt(r99559);
double r99561 = r99552 + r99560;
double r99562 = r99561 / r99556;
return r99562;
}
double f(double a, double b, double c) {
double r99563 = c;
double r99564 = b;
double r99565 = -r99564;
double r99566 = r99564 * r99564;
double r99567 = 3.0;
double r99568 = a;
double r99569 = r99567 * r99568;
double r99570 = r99569 * r99563;
double r99571 = r99566 - r99570;
double r99572 = sqrt(r99571);
double r99573 = r99565 - r99572;
double r99574 = r99563 / r99573;
return r99574;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.7
rmApplied flip-+52.7
Simplified0.5
rmApplied associate-*r*0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied associate-/l*0.4
Simplified0.4
rmApplied div-inv0.4
Simplified0.1
Final simplification0.1
herbie shell --seed 2020034
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))