\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(-b\right) + \left(2 \cdot a\right) \cdot \left(-\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r36442 = b;
double r36443 = -r36442;
double r36444 = r36442 * r36442;
double r36445 = 4.0;
double r36446 = a;
double r36447 = r36445 * r36446;
double r36448 = c;
double r36449 = r36447 * r36448;
double r36450 = r36444 - r36449;
double r36451 = sqrt(r36450);
double r36452 = r36443 + r36451;
double r36453 = 2.0;
double r36454 = r36453 * r36446;
double r36455 = r36452 / r36454;
return r36455;
}
double f(double a, double b, double c) {
double r36456 = 0.0;
double r36457 = 4.0;
double r36458 = a;
double r36459 = c;
double r36460 = r36458 * r36459;
double r36461 = r36457 * r36460;
double r36462 = r36456 + r36461;
double r36463 = 2.0;
double r36464 = r36463 * r36458;
double r36465 = b;
double r36466 = -r36465;
double r36467 = r36464 * r36466;
double r36468 = r36465 * r36465;
double r36469 = r36457 * r36458;
double r36470 = r36469 * r36459;
double r36471 = r36468 - r36470;
double r36472 = sqrt(r36471);
double r36473 = -r36472;
double r36474 = r36464 * r36473;
double r36475 = r36467 + r36474;
double r36476 = r36462 / r36475;
return r36476;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.3
rmApplied flip-+52.3
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2019354 +o rules:numerics
(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)))