\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 r113239 = b;
double r113240 = -r113239;
double r113241 = r113239 * r113239;
double r113242 = 3.0;
double r113243 = a;
double r113244 = r113242 * r113243;
double r113245 = c;
double r113246 = r113244 * r113245;
double r113247 = r113241 - r113246;
double r113248 = sqrt(r113247);
double r113249 = r113240 + r113248;
double r113250 = r113249 / r113244;
return r113250;
}
double f(double a, double b, double c) {
double r113251 = b;
double r113252 = 2.0;
double r113253 = pow(r113251, r113252);
double r113254 = r113253 - r113253;
double r113255 = 3.0;
double r113256 = a;
double r113257 = r113255 * r113256;
double r113258 = c;
double r113259 = r113257 * r113258;
double r113260 = r113254 + r113259;
double r113261 = -r113251;
double r113262 = r113251 * r113251;
double r113263 = r113262 - r113259;
double r113264 = sqrt(r113263);
double r113265 = r113261 - r113264;
double r113266 = r113257 * r113265;
double r113267 = r113260 / r113266;
return r113267;
}



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