\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 r60948 = b;
double r60949 = -r60948;
double r60950 = r60948 * r60948;
double r60951 = 4.0;
double r60952 = a;
double r60953 = r60951 * r60952;
double r60954 = c;
double r60955 = r60953 * r60954;
double r60956 = r60950 - r60955;
double r60957 = sqrt(r60956);
double r60958 = r60949 + r60957;
double r60959 = 2.0;
double r60960 = r60959 * r60952;
double r60961 = r60958 / r60960;
return r60961;
}
double f(double a, double b, double c) {
double r60962 = 2.0;
double r60963 = c;
double r60964 = r60962 * r60963;
double r60965 = b;
double r60966 = -r60965;
double r60967 = r60965 * r60965;
double r60968 = 4.0;
double r60969 = a;
double r60970 = r60968 * r60969;
double r60971 = r60970 * r60963;
double r60972 = r60967 - r60971;
double r60973 = sqrt(r60972);
double r60974 = r60966 - r60973;
double r60975 = r60964 / r60974;
return r60975;
}



Bits error versus a



Bits error versus b



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