\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 r34406 = b;
double r34407 = -r34406;
double r34408 = r34406 * r34406;
double r34409 = 4.0;
double r34410 = a;
double r34411 = r34409 * r34410;
double r34412 = c;
double r34413 = r34411 * r34412;
double r34414 = r34408 - r34413;
double r34415 = sqrt(r34414);
double r34416 = r34407 + r34415;
double r34417 = 2.0;
double r34418 = r34417 * r34410;
double r34419 = r34416 / r34418;
return r34419;
}
double f(double a, double b, double c) {
double r34420 = 1.0;
double r34421 = 2.0;
double r34422 = r34420 / r34421;
double r34423 = c;
double r34424 = 4.0;
double r34425 = r34423 * r34424;
double r34426 = r34425 / r34420;
double r34427 = b;
double r34428 = -r34427;
double r34429 = r34427 * r34427;
double r34430 = a;
double r34431 = r34424 * r34430;
double r34432 = r34431 * r34423;
double r34433 = r34429 - r34432;
double r34434 = sqrt(r34433);
double r34435 = r34428 - r34434;
double r34436 = r34426 / r34435;
double r34437 = r34422 * r34436;
return r34437;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.3
rmApplied flip-+28.3
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 2019352 +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)))