\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 r98403 = b;
double r98404 = -r98403;
double r98405 = r98403 * r98403;
double r98406 = 3.0;
double r98407 = a;
double r98408 = r98406 * r98407;
double r98409 = c;
double r98410 = r98408 * r98409;
double r98411 = r98405 - r98410;
double r98412 = sqrt(r98411);
double r98413 = r98404 + r98412;
double r98414 = r98413 / r98408;
return r98414;
}
double f(double a, double b, double c) {
double r98415 = 3.0;
double r98416 = a;
double r98417 = r98415 * r98416;
double r98418 = c;
double r98419 = b;
double r98420 = -r98419;
double r98421 = r98419 * r98419;
double r98422 = r98417 * r98418;
double r98423 = r98421 - r98422;
double r98424 = sqrt(r98423);
double r98425 = r98420 - r98424;
double r98426 = r98418 / r98425;
double r98427 = r98426 / r98415;
double r98428 = r98427 / r98416;
double r98429 = r98417 * r98428;
return r98429;
}



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)))