\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{1}{\frac{2}{4}}}{\frac{1}{c}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r36875 = b;
double r36876 = -r36875;
double r36877 = r36875 * r36875;
double r36878 = 4.0;
double r36879 = a;
double r36880 = r36878 * r36879;
double r36881 = c;
double r36882 = r36880 * r36881;
double r36883 = r36877 - r36882;
double r36884 = sqrt(r36883);
double r36885 = r36876 + r36884;
double r36886 = 2.0;
double r36887 = r36886 * r36879;
double r36888 = r36885 / r36887;
return r36888;
}
double f(double a, double b, double c) {
double r36889 = 1.0;
double r36890 = 2.0;
double r36891 = 4.0;
double r36892 = r36890 / r36891;
double r36893 = r36889 / r36892;
double r36894 = c;
double r36895 = r36889 / r36894;
double r36896 = r36893 / r36895;
double r36897 = b;
double r36898 = -r36897;
double r36899 = r36897 * r36897;
double r36900 = a;
double r36901 = r36891 * r36900;
double r36902 = r36901 * r36894;
double r36903 = r36899 - r36902;
double r36904 = sqrt(r36903);
double r36905 = r36898 - r36904;
double r36906 = r36896 / r36905;
return r36906;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied associate-/r*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020100
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))