\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r41951 = b;
double r41952 = -r41951;
double r41953 = r41951 * r41951;
double r41954 = 4.0;
double r41955 = a;
double r41956 = r41954 * r41955;
double r41957 = c;
double r41958 = r41956 * r41957;
double r41959 = r41953 - r41958;
double r41960 = sqrt(r41959);
double r41961 = r41952 + r41960;
double r41962 = 2.0;
double r41963 = r41962 * r41955;
double r41964 = r41961 / r41963;
return r41964;
}
double f(double a, double b, double c) {
double r41965 = 4.0;
double r41966 = a;
double r41967 = c;
double r41968 = r41966 * r41967;
double r41969 = r41965 * r41968;
double r41970 = 2.0;
double r41971 = r41970 * r41966;
double r41972 = r41969 / r41971;
double r41973 = b;
double r41974 = -r41973;
double r41975 = r41973 * r41973;
double r41976 = r41965 * r41966;
double r41977 = r41976 * r41967;
double r41978 = r41975 - r41977;
double r41979 = sqrt(r41978);
double r41980 = r41974 - r41979;
double r41981 = r41972 / r41980;
return r41981;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.4
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied associate-/r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019326
(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)))