\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{c \cdot 4}{1}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r34399 = b;
double r34400 = -r34399;
double r34401 = r34399 * r34399;
double r34402 = 4.0;
double r34403 = a;
double r34404 = r34402 * r34403;
double r34405 = c;
double r34406 = r34404 * r34405;
double r34407 = r34401 - r34406;
double r34408 = sqrt(r34407);
double r34409 = r34400 + r34408;
double r34410 = 2.0;
double r34411 = r34410 * r34403;
double r34412 = r34409 / r34411;
return r34412;
}
double f(double a, double b, double c) {
double r34413 = 1.0;
double r34414 = 2.0;
double r34415 = r34413 / r34414;
double r34416 = c;
double r34417 = 4.0;
double r34418 = r34416 * r34417;
double r34419 = r34418 / r34413;
double r34420 = b;
double r34421 = -r34420;
double r34422 = r34420 * r34420;
double r34423 = a;
double r34424 = r34417 * r34423;
double r34425 = r34424 * r34416;
double r34426 = r34422 - r34425;
double r34427 = sqrt(r34426);
double r34428 = r34421 - r34427;
double r34429 = r34419 / r34428;
double r34430 = r34415 * r34429;
return r34430;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied associate-/r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020046 +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)))