\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1 \cdot \frac{4}{\frac{\frac{-b}{a}}{c} - \frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{a}}{c}}}{2 \cdot a}double f(double a, double b, double c) {
double r49913 = b;
double r49914 = -r49913;
double r49915 = r49913 * r49913;
double r49916 = 4.0;
double r49917 = a;
double r49918 = r49916 * r49917;
double r49919 = c;
double r49920 = r49918 * r49919;
double r49921 = r49915 - r49920;
double r49922 = sqrt(r49921);
double r49923 = r49914 + r49922;
double r49924 = 2.0;
double r49925 = r49924 * r49917;
double r49926 = r49923 / r49925;
return r49926;
}
double f(double a, double b, double c) {
double r49927 = 1.0;
double r49928 = 4.0;
double r49929 = b;
double r49930 = -r49929;
double r49931 = a;
double r49932 = r49930 / r49931;
double r49933 = c;
double r49934 = r49932 / r49933;
double r49935 = r49929 * r49929;
double r49936 = r49928 * r49931;
double r49937 = r49936 * r49933;
double r49938 = r49935 - r49937;
double r49939 = sqrt(r49938);
double r49940 = r49939 / r49931;
double r49941 = r49940 / r49933;
double r49942 = r49934 - r49941;
double r49943 = r49928 / r49942;
double r49944 = r49927 * r49943;
double r49945 = 2.0;
double r49946 = r49945 * r49931;
double r49947 = r49944 / r49946;
return r49947;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.4
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied associate-/r*0.5
rmApplied div-sub0.5
Applied div-sub0.5
Final simplification0.5
herbie shell --seed 2020062 +o rules:numerics
(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)))