\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\frac{3 \cdot \left(a \cdot c\right)}{3} \cdot \frac{1}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{a}double f(double a, double b, double c) {
double r93439 = b;
double r93440 = -r93439;
double r93441 = r93439 * r93439;
double r93442 = 3.0;
double r93443 = a;
double r93444 = r93442 * r93443;
double r93445 = c;
double r93446 = r93444 * r93445;
double r93447 = r93441 - r93446;
double r93448 = sqrt(r93447);
double r93449 = r93440 + r93448;
double r93450 = r93449 / r93444;
return r93450;
}
double f(double a, double b, double c) {
double r93451 = 3.0;
double r93452 = a;
double r93453 = c;
double r93454 = r93452 * r93453;
double r93455 = r93451 * r93454;
double r93456 = r93455 / r93451;
double r93457 = 1.0;
double r93458 = b;
double r93459 = -r93458;
double r93460 = r93458 * r93458;
double r93461 = r93451 * r93452;
double r93462 = r93461 * r93453;
double r93463 = r93460 - r93462;
double r93464 = sqrt(r93463);
double r93465 = r93459 - r93464;
double r93466 = r93457 / r93465;
double r93467 = r93456 * r93466;
double r93468 = r93467 / r93452;
return r93468;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.1
rmApplied flip-+52.1
Simplified0.5
rmApplied associate-/r*0.5
Simplified0.5
rmApplied div-inv0.5
Final simplification0.5
herbie shell --seed 2020024
(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)))