\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left(3 \cdot a\right) \cdot c}{\left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right) \cdot \left(3 \cdot a\right)}double f(double a, double b, double c) {
double r56352 = b;
double r56353 = -r56352;
double r56354 = r56352 * r56352;
double r56355 = 3.0;
double r56356 = a;
double r56357 = r56355 * r56356;
double r56358 = c;
double r56359 = r56357 * r56358;
double r56360 = r56354 - r56359;
double r56361 = sqrt(r56360);
double r56362 = r56353 + r56361;
double r56363 = r56362 / r56357;
return r56363;
}
double f(double a, double b, double c) {
double r56364 = 3.0;
double r56365 = a;
double r56366 = r56364 * r56365;
double r56367 = c;
double r56368 = r56366 * r56367;
double r56369 = b;
double r56370 = -r56369;
double r56371 = r56369 * r56369;
double r56372 = r56371 - r56368;
double r56373 = sqrt(r56372);
double r56374 = r56370 - r56373;
double r56375 = r56374 * r56366;
double r56376 = r56368 / r56375;
return r56376;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 44.1
rmApplied flip-+44.1
Simplified0.5
rmApplied div-inv0.6
Applied associate-/l*0.6
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied associate-*l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019326 +o rules:numerics
(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)))