\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{\frac{2 \cdot a}{4 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r32656 = b;
double r32657 = -r32656;
double r32658 = r32656 * r32656;
double r32659 = 4.0;
double r32660 = a;
double r32661 = r32659 * r32660;
double r32662 = c;
double r32663 = r32661 * r32662;
double r32664 = r32658 - r32663;
double r32665 = sqrt(r32664);
double r32666 = r32657 + r32665;
double r32667 = 2.0;
double r32668 = r32667 * r32660;
double r32669 = r32666 / r32668;
return r32669;
}
double f(double a, double b, double c) {
double r32670 = 1.0;
double r32671 = 2.0;
double r32672 = a;
double r32673 = r32671 * r32672;
double r32674 = 4.0;
double r32675 = c;
double r32676 = r32672 * r32675;
double r32677 = r32674 * r32676;
double r32678 = r32673 / r32677;
double r32679 = b;
double r32680 = -r32679;
double r32681 = r32679 * r32679;
double r32682 = r32674 * r32672;
double r32683 = r32682 * r32675;
double r32684 = r32681 - r32683;
double r32685 = sqrt(r32684);
double r32686 = r32680 - r32685;
double r32687 = r32678 * r32686;
double r32688 = r32670 / r32687;
return r32688;
}



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 associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020036
(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)))