\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.396811349079212 \cdot 10^{+61}:\\
\;\;\;\;\frac{\left(\frac{c}{\frac{b}{a}} - b\right) \cdot 2}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.3659668388152999 \cdot 10^{-67}:\\
\;\;\;\;\frac{\frac{1}{2}}{a} \cdot \left(\sqrt{\mathsf{fma}\left(c, \left(-4 \cdot a\right), \left(b \cdot b\right)\right)} - b\right)\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r2387897 = b;
double r2387898 = -r2387897;
double r2387899 = r2387897 * r2387897;
double r2387900 = 4.0;
double r2387901 = a;
double r2387902 = r2387900 * r2387901;
double r2387903 = c;
double r2387904 = r2387902 * r2387903;
double r2387905 = r2387899 - r2387904;
double r2387906 = sqrt(r2387905);
double r2387907 = r2387898 + r2387906;
double r2387908 = 2.0;
double r2387909 = r2387908 * r2387901;
double r2387910 = r2387907 / r2387909;
return r2387910;
}
double f(double a, double b, double c) {
double r2387911 = b;
double r2387912 = -3.396811349079212e+61;
bool r2387913 = r2387911 <= r2387912;
double r2387914 = c;
double r2387915 = a;
double r2387916 = r2387911 / r2387915;
double r2387917 = r2387914 / r2387916;
double r2387918 = r2387917 - r2387911;
double r2387919 = 2.0;
double r2387920 = r2387918 * r2387919;
double r2387921 = r2387915 * r2387919;
double r2387922 = r2387920 / r2387921;
double r2387923 = 1.3659668388152999e-67;
bool r2387924 = r2387911 <= r2387923;
double r2387925 = 0.5;
double r2387926 = r2387925 / r2387915;
double r2387927 = -4.0;
double r2387928 = r2387927 * r2387915;
double r2387929 = r2387911 * r2387911;
double r2387930 = fma(r2387914, r2387928, r2387929);
double r2387931 = sqrt(r2387930);
double r2387932 = r2387931 - r2387911;
double r2387933 = r2387926 * r2387932;
double r2387934 = r2387914 / r2387911;
double r2387935 = -r2387934;
double r2387936 = r2387924 ? r2387933 : r2387935;
double r2387937 = r2387913 ? r2387922 : r2387936;
return r2387937;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.6 |
|---|---|
| Target | 20.8 |
| Herbie | 9.9 |
if b < -3.396811349079212e+61Initial program 37.6
Taylor expanded around -inf 9.6
Simplified4.4
if -3.396811349079212e+61 < b < 1.3659668388152999e-67Initial program 13.9
Simplified13.9
rmApplied *-un-lft-identity13.9
Applied div-inv13.9
Applied times-frac14.0
Simplified14.0
Simplified14.0
if 1.3659668388152999e-67 < b Initial program 53.0
Taylor expanded around inf 8.1
Simplified8.1
Final simplification9.9
herbie shell --seed 2019130 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))