\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{c \cdot 4}{1}}{\mathsf{fma}\left(\sqrt{b}, -\sqrt{b}, -\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r32881 = b;
double r32882 = -r32881;
double r32883 = r32881 * r32881;
double r32884 = 4.0;
double r32885 = a;
double r32886 = r32884 * r32885;
double r32887 = c;
double r32888 = r32886 * r32887;
double r32889 = r32883 - r32888;
double r32890 = sqrt(r32889);
double r32891 = r32882 + r32890;
double r32892 = 2.0;
double r32893 = r32892 * r32885;
double r32894 = r32891 / r32893;
return r32894;
}
double f(double a, double b, double c) {
double r32895 = 1.0;
double r32896 = 2.0;
double r32897 = r32895 / r32896;
double r32898 = c;
double r32899 = 4.0;
double r32900 = r32898 * r32899;
double r32901 = r32900 / r32895;
double r32902 = b;
double r32903 = sqrt(r32902);
double r32904 = -r32903;
double r32905 = r32902 * r32902;
double r32906 = a;
double r32907 = r32899 * r32906;
double r32908 = r32907 * r32898;
double r32909 = r32905 - r32908;
double r32910 = sqrt(r32909);
double r32911 = -r32910;
double r32912 = fma(r32903, r32904, r32911);
double r32913 = r32901 / r32912;
double r32914 = r32897 * r32913;
return r32914;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 43.4
rmApplied flip-+43.4
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
rmApplied add-sqr-sqrt0.3
Applied distribute-rgt-neg-in0.3
Applied fma-neg0.2
Final simplification0.2
herbie shell --seed 2020056 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))