\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{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r38875 = b;
double r38876 = -r38875;
double r38877 = r38875 * r38875;
double r38878 = 4.0;
double r38879 = a;
double r38880 = r38878 * r38879;
double r38881 = c;
double r38882 = r38880 * r38881;
double r38883 = r38877 - r38882;
double r38884 = sqrt(r38883);
double r38885 = r38876 + r38884;
double r38886 = 2.0;
double r38887 = r38886 * r38879;
double r38888 = r38885 / r38887;
return r38888;
}
double f(double a, double b, double c) {
double r38889 = 1.0;
double r38890 = 2.0;
double r38891 = r38889 / r38890;
double r38892 = 4.0;
double r38893 = a;
double r38894 = c;
double r38895 = r38893 * r38894;
double r38896 = r38892 * r38895;
double r38897 = r38896 / r38893;
double r38898 = b;
double r38899 = r38898 * r38898;
double r38900 = r38892 * r38893;
double r38901 = r38900 * r38894;
double r38902 = r38899 - r38901;
double r38903 = sqrt(r38902);
double r38904 = r38898 + r38903;
double r38905 = -r38904;
double r38906 = r38897 / r38905;
double r38907 = r38891 * r38906;
return r38907;
}



Bits error versus a



Bits error versus b



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