\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r94234 = b;
double r94235 = -r94234;
double r94236 = r94234 * r94234;
double r94237 = 3.0;
double r94238 = a;
double r94239 = r94237 * r94238;
double r94240 = c;
double r94241 = r94239 * r94240;
double r94242 = r94236 - r94241;
double r94243 = sqrt(r94242);
double r94244 = r94235 + r94243;
double r94245 = r94244 / r94239;
return r94245;
}
double f(double a, double b, double c) {
double r94246 = c;
double r94247 = b;
double r94248 = -r94247;
double r94249 = r94247 * r94247;
double r94250 = 3.0;
double r94251 = a;
double r94252 = r94250 * r94251;
double r94253 = r94252 * r94246;
double r94254 = r94249 - r94253;
double r94255 = sqrt(r94254);
double r94256 = r94248 - r94255;
double r94257 = r94246 / r94256;
return r94257;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.6
rmApplied div-inv0.6
Applied times-frac0.6
Simplified0.5
rmApplied associate-*r/0.5
Simplified0.4
Final simplification0.3
herbie shell --seed 2019308
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))