\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4 \cdot \frac{c}{1}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r29508 = b;
double r29509 = -r29508;
double r29510 = r29508 * r29508;
double r29511 = 4.0;
double r29512 = a;
double r29513 = r29511 * r29512;
double r29514 = c;
double r29515 = r29513 * r29514;
double r29516 = r29510 - r29515;
double r29517 = sqrt(r29516);
double r29518 = r29509 + r29517;
double r29519 = 2.0;
double r29520 = r29519 * r29512;
double r29521 = r29518 / r29520;
return r29521;
}
double f(double a, double b, double c) {
double r29522 = 1.0;
double r29523 = 2.0;
double r29524 = r29522 / r29523;
double r29525 = 4.0;
double r29526 = c;
double r29527 = r29526 / r29522;
double r29528 = r29525 * r29527;
double r29529 = b;
double r29530 = -r29529;
double r29531 = r29529 * r29529;
double r29532 = a;
double r29533 = r29525 * r29532;
double r29534 = r29533 * r29526;
double r29535 = r29531 - r29534;
double r29536 = sqrt(r29535);
double r29537 = r29530 - r29536;
double r29538 = r29528 / r29537;
double r29539 = r29524 * r29538;
return r29539;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.3
rmApplied flip-+52.3
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied associate-/r*0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.2
Simplified0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2020033
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))