\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r36290 = b;
double r36291 = -r36290;
double r36292 = r36290 * r36290;
double r36293 = 4.0;
double r36294 = a;
double r36295 = r36293 * r36294;
double r36296 = c;
double r36297 = r36295 * r36296;
double r36298 = r36292 - r36297;
double r36299 = sqrt(r36298);
double r36300 = r36291 + r36299;
double r36301 = 2.0;
double r36302 = r36301 * r36294;
double r36303 = r36300 / r36302;
return r36303;
}
double f(double a, double b, double c) {
double r36304 = 2.0;
double r36305 = c;
double r36306 = r36304 * r36305;
double r36307 = b;
double r36308 = -r36307;
double r36309 = r36307 * r36307;
double r36310 = 4.0;
double r36311 = a;
double r36312 = r36310 * r36311;
double r36313 = r36312 * r36305;
double r36314 = r36309 - r36313;
double r36315 = sqrt(r36314);
double r36316 = r36308 - r36315;
double r36317 = r36306 / r36316;
return r36317;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.4
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.3
Simplified0.3
Taylor expanded around 0 0.3
Final simplification0.3
herbie shell --seed 2020039 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, 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) (* (* 4 a) c)))) (* 2 a)))