\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left({b}^{2} - {b}^{2}\right) + \left(3 \cdot a\right) \cdot c}{\left(3 \cdot a\right) \cdot \left(-b\right) + \left(3 \cdot a\right) \cdot \left(-\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r118520 = b;
double r118521 = -r118520;
double r118522 = r118520 * r118520;
double r118523 = 3.0;
double r118524 = a;
double r118525 = r118523 * r118524;
double r118526 = c;
double r118527 = r118525 * r118526;
double r118528 = r118522 - r118527;
double r118529 = sqrt(r118528);
double r118530 = r118521 + r118529;
double r118531 = r118530 / r118525;
return r118531;
}
double f(double a, double b, double c) {
double r118532 = b;
double r118533 = 2.0;
double r118534 = pow(r118532, r118533);
double r118535 = r118534 - r118534;
double r118536 = 3.0;
double r118537 = a;
double r118538 = r118536 * r118537;
double r118539 = c;
double r118540 = r118538 * r118539;
double r118541 = r118535 + r118540;
double r118542 = -r118532;
double r118543 = r118538 * r118542;
double r118544 = r118532 * r118532;
double r118545 = r118544 - r118540;
double r118546 = sqrt(r118545);
double r118547 = -r118546;
double r118548 = r118538 * r118547;
double r118549 = r118543 + r118548;
double r118550 = r118541 / r118549;
return r118550;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.9
rmApplied flip-+43.8
Simplified0.6
rmApplied associate-*r*0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2020002
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))