\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(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r85448 = b;
double r85449 = -r85448;
double r85450 = r85448 * r85448;
double r85451 = 3.0;
double r85452 = a;
double r85453 = r85451 * r85452;
double r85454 = c;
double r85455 = r85453 * r85454;
double r85456 = r85450 - r85455;
double r85457 = sqrt(r85456);
double r85458 = r85449 + r85457;
double r85459 = r85458 / r85453;
return r85459;
}
double f(double a, double b, double c) {
double r85460 = b;
double r85461 = 2.0;
double r85462 = pow(r85460, r85461);
double r85463 = r85462 - r85462;
double r85464 = 3.0;
double r85465 = a;
double r85466 = r85464 * r85465;
double r85467 = c;
double r85468 = r85466 * r85467;
double r85469 = r85463 + r85468;
double r85470 = -r85460;
double r85471 = r85460 * r85460;
double r85472 = r85471 - r85468;
double r85473 = sqrt(r85472);
double r85474 = r85470 - r85473;
double r85475 = r85466 * r85474;
double r85476 = r85469 / r85475;
return r85476;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.3
rmApplied flip-+52.4
Simplified0.5
rmApplied associate-*r*0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019354
(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)))