\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\left(3 \cdot a\right) \cdot \frac{\frac{\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3}}{a}double f(double a, double b, double c) {
double r89507 = b;
double r89508 = -r89507;
double r89509 = r89507 * r89507;
double r89510 = 3.0;
double r89511 = a;
double r89512 = r89510 * r89511;
double r89513 = c;
double r89514 = r89512 * r89513;
double r89515 = r89509 - r89514;
double r89516 = sqrt(r89515);
double r89517 = r89508 + r89516;
double r89518 = r89517 / r89512;
return r89518;
}
double f(double a, double b, double c) {
double r89519 = 3.0;
double r89520 = a;
double r89521 = r89519 * r89520;
double r89522 = c;
double r89523 = b;
double r89524 = -r89523;
double r89525 = r89523 * r89523;
double r89526 = r89521 * r89522;
double r89527 = r89525 - r89526;
double r89528 = sqrt(r89527);
double r89529 = r89524 - r89528;
double r89530 = r89522 / r89529;
double r89531 = r89530 / r89519;
double r89532 = r89531 / r89520;
double r89533 = r89521 * r89532;
return r89533;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.6
rmApplied associate-/r*0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied times-frac0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019325
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))