\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{\frac{2}{4} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c}}double f(double a, double b, double c) {
double r32899 = b;
double r32900 = -r32899;
double r32901 = r32899 * r32899;
double r32902 = 4.0;
double r32903 = a;
double r32904 = r32902 * r32903;
double r32905 = c;
double r32906 = r32904 * r32905;
double r32907 = r32901 - r32906;
double r32908 = sqrt(r32907);
double r32909 = r32900 + r32908;
double r32910 = 2.0;
double r32911 = r32910 * r32903;
double r32912 = r32909 / r32911;
return r32912;
}
double f(double a, double b, double c) {
double r32913 = 1.0;
double r32914 = 2.0;
double r32915 = 4.0;
double r32916 = r32914 / r32915;
double r32917 = b;
double r32918 = -r32917;
double r32919 = r32917 * r32917;
double r32920 = a;
double r32921 = r32915 * r32920;
double r32922 = c;
double r32923 = r32921 * r32922;
double r32924 = r32919 - r32923;
double r32925 = sqrt(r32924);
double r32926 = r32918 - r32925;
double r32927 = r32926 / r32922;
double r32928 = r32916 * r32927;
double r32929 = r32913 / r32928;
return r32929;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.2
rmApplied flip-+28.2
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied times-frac0.5
Applied associate-*l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020083
(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)))