\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r35847 = b;
double r35848 = -r35847;
double r35849 = r35847 * r35847;
double r35850 = 4.0;
double r35851 = a;
double r35852 = r35850 * r35851;
double r35853 = c;
double r35854 = r35852 * r35853;
double r35855 = r35849 - r35854;
double r35856 = sqrt(r35855);
double r35857 = r35848 + r35856;
double r35858 = 2.0;
double r35859 = r35858 * r35851;
double r35860 = r35857 / r35859;
return r35860;
}
double f(double a, double b, double c) {
double r35861 = 2.0;
double r35862 = c;
double r35863 = r35861 * r35862;
double r35864 = b;
double r35865 = -r35864;
double r35866 = r35864 * r35864;
double r35867 = 4.0;
double r35868 = a;
double r35869 = r35867 * r35868;
double r35870 = r35869 * r35862;
double r35871 = r35866 - r35870;
double r35872 = sqrt(r35871);
double r35873 = r35865 - r35872;
double r35874 = r35863 / r35873;
return r35874;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.5
rmApplied flip-+52.5
Simplified0.4
rmApplied div-inv0.4
Applied associate-/l*0.4
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Taylor expanded around 0 0.1
Final simplification0.1
herbie shell --seed 2020047 +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)))