\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 r32965 = b;
double r32966 = -r32965;
double r32967 = r32965 * r32965;
double r32968 = 4.0;
double r32969 = a;
double r32970 = r32968 * r32969;
double r32971 = c;
double r32972 = r32970 * r32971;
double r32973 = r32967 - r32972;
double r32974 = sqrt(r32973);
double r32975 = r32966 + r32974;
double r32976 = 2.0;
double r32977 = r32976 * r32969;
double r32978 = r32975 / r32977;
return r32978;
}
double f(double a, double b, double c) {
double r32979 = 4.0;
double r32980 = a;
double r32981 = c;
double r32982 = r32980 * r32981;
double r32983 = r32979 * r32982;
double r32984 = 2.0;
double r32985 = r32984 * r32980;
double r32986 = r32983 / r32985;
double r32987 = b;
double r32988 = -r32987;
double r32989 = r32987 * r32987;
double r32990 = r32979 * r32980;
double r32991 = r32990 * r32981;
double r32992 = r32989 - r32991;
double r32993 = sqrt(r32992);
double r32994 = r32988 - r32993;
double r32995 = r32986 / r32994;
return r32995;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.5
rmApplied div-inv0.5
rmApplied pow10.5
Applied pow10.5
Applied pow-prod-down0.5
Simplified0.3
Final simplification0.3
herbie shell --seed 2020046
(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)))