\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{1}{\frac{\frac{-b}{4}}{a \cdot c} - \frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}{a \cdot c}}}{2 \cdot a}double f(double a, double b, double c) {
double r48582 = b;
double r48583 = -r48582;
double r48584 = r48582 * r48582;
double r48585 = 4.0;
double r48586 = a;
double r48587 = r48585 * r48586;
double r48588 = c;
double r48589 = r48587 * r48588;
double r48590 = r48584 - r48589;
double r48591 = sqrt(r48590);
double r48592 = r48583 + r48591;
double r48593 = 2.0;
double r48594 = r48593 * r48586;
double r48595 = r48592 / r48594;
return r48595;
}
double f(double a, double b, double c) {
double r48596 = 1.0;
double r48597 = b;
double r48598 = -r48597;
double r48599 = 4.0;
double r48600 = r48598 / r48599;
double r48601 = a;
double r48602 = c;
double r48603 = r48601 * r48602;
double r48604 = r48600 / r48603;
double r48605 = r48597 * r48597;
double r48606 = r48599 * r48601;
double r48607 = r48606 * r48602;
double r48608 = r48605 - r48607;
double r48609 = sqrt(r48608);
double r48610 = r48609 / r48599;
double r48611 = r48610 / r48603;
double r48612 = r48604 - r48611;
double r48613 = r48596 / r48612;
double r48614 = 2.0;
double r48615 = r48614 * r48601;
double r48616 = r48613 / r48615;
return r48616;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.4
rmApplied flip-+52.4
Simplified0.4
rmApplied clear-num0.4
Simplified0.4
rmApplied div-sub0.4
Applied div-sub0.4
Final simplification0.4
herbie shell --seed 2020081 +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)))