\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\left(-\frac{4 \cdot a}{a}\right) \cdot \frac{c}{\sqrt{\mathsf{fma}\left(b, b, \left(-c\right) \cdot \left(4 \cdot a\right)\right)} + b}}{2}double f(double a, double b, double c) {
double r57924 = b;
double r57925 = -r57924;
double r57926 = r57924 * r57924;
double r57927 = 4.0;
double r57928 = a;
double r57929 = r57927 * r57928;
double r57930 = c;
double r57931 = r57929 * r57930;
double r57932 = r57926 - r57931;
double r57933 = sqrt(r57932);
double r57934 = r57925 + r57933;
double r57935 = 2.0;
double r57936 = r57935 * r57928;
double r57937 = r57934 / r57936;
return r57937;
}
double f(double a, double b, double c) {
double r57938 = 4.0;
double r57939 = a;
double r57940 = r57938 * r57939;
double r57941 = r57940 / r57939;
double r57942 = -r57941;
double r57943 = c;
double r57944 = b;
double r57945 = -r57943;
double r57946 = r57945 * r57940;
double r57947 = fma(r57944, r57944, r57946);
double r57948 = sqrt(r57947);
double r57949 = r57948 + r57944;
double r57950 = r57943 / r57949;
double r57951 = r57942 * r57950;
double r57952 = 2.0;
double r57953 = r57951 / r57952;
return r57953;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.1
Simplified28.1
rmApplied flip--28.1
Simplified0.4
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.3
Final simplification0.3
herbie shell --seed 2019179 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, narrow range"
: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.0 a) c)))) (* 2.0 a)))