\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{a}}{-\left(b + \sqrt{\mathsf{fma}\left(b, b, 0 - 4 \cdot \left(a \cdot c\right)\right)}\right)}double f(double a, double b, double c) {
double r39775 = b;
double r39776 = -r39775;
double r39777 = r39775 * r39775;
double r39778 = 4.0;
double r39779 = a;
double r39780 = r39778 * r39779;
double r39781 = c;
double r39782 = r39780 * r39781;
double r39783 = r39777 - r39782;
double r39784 = sqrt(r39783);
double r39785 = r39776 + r39784;
double r39786 = 2.0;
double r39787 = r39786 * r39779;
double r39788 = r39785 / r39787;
return r39788;
}
double f(double a, double b, double c) {
double r39789 = 1.0;
double r39790 = 2.0;
double r39791 = r39789 / r39790;
double r39792 = 4.0;
double r39793 = a;
double r39794 = c;
double r39795 = r39793 * r39794;
double r39796 = r39792 * r39795;
double r39797 = r39796 / r39793;
double r39798 = b;
double r39799 = 0.0;
double r39800 = r39799 - r39796;
double r39801 = fma(r39798, r39798, r39800);
double r39802 = sqrt(r39801);
double r39803 = r39798 + r39802;
double r39804 = -r39803;
double r39805 = r39797 / r39804;
double r39806 = r39791 * r39805;
return r39806;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 52.7
rmApplied flip-+52.7
Simplified0.4
rmApplied fma-neg0.4
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied distribute-rgt-neg-in0.5
Applied fma-neg0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020001 +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)))