\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 r33608 = b;
double r33609 = -r33608;
double r33610 = r33608 * r33608;
double r33611 = 4.0;
double r33612 = a;
double r33613 = r33611 * r33612;
double r33614 = c;
double r33615 = r33613 * r33614;
double r33616 = r33610 - r33615;
double r33617 = sqrt(r33616);
double r33618 = r33609 + r33617;
double r33619 = 2.0;
double r33620 = r33619 * r33612;
double r33621 = r33618 / r33620;
return r33621;
}
double f(double a, double b, double c) {
double r33622 = 0.0;
double r33623 = 4.0;
double r33624 = a;
double r33625 = c;
double r33626 = r33624 * r33625;
double r33627 = r33623 * r33626;
double r33628 = r33622 + r33627;
double r33629 = 2.0;
double r33630 = r33629 * r33624;
double r33631 = b;
double r33632 = -r33631;
double r33633 = r33630 * r33632;
double r33634 = r33631 * r33631;
double r33635 = r33623 * r33624;
double r33636 = r33635 * r33625;
double r33637 = r33634 - r33636;
double r33638 = sqrt(r33637);
double r33639 = -r33638;
double r33640 = r33630 * r33639;
double r33641 = r33633 + r33640;
double r33642 = r33628 / r33641;
return r33642;
}



Bits error versus a



Bits error versus b



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