\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left({b}^{2} - {b}^{2}\right) + \left(3 \cdot a\right) \cdot c}{\left(3 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r115250 = b;
double r115251 = -r115250;
double r115252 = r115250 * r115250;
double r115253 = 3.0;
double r115254 = a;
double r115255 = r115253 * r115254;
double r115256 = c;
double r115257 = r115255 * r115256;
double r115258 = r115252 - r115257;
double r115259 = sqrt(r115258);
double r115260 = r115251 + r115259;
double r115261 = r115260 / r115255;
return r115261;
}
double f(double a, double b, double c) {
double r115262 = b;
double r115263 = 2.0;
double r115264 = pow(r115262, r115263);
double r115265 = r115264 - r115264;
double r115266 = 3.0;
double r115267 = a;
double r115268 = r115266 * r115267;
double r115269 = c;
double r115270 = r115268 * r115269;
double r115271 = r115265 + r115270;
double r115272 = -r115262;
double r115273 = r115262 * r115262;
double r115274 = r115273 - r115270;
double r115275 = sqrt(r115274);
double r115276 = r115272 - r115275;
double r115277 = r115268 * r115276;
double r115278 = r115271 / r115277;
return r115278;
}



Bits error versus a



Bits error versus b



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