\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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r219864 = b;
double r219865 = -r219864;
double r219866 = r219864 * r219864;
double r219867 = 4.0;
double r219868 = a;
double r219869 = r219867 * r219868;
double r219870 = c;
double r219871 = r219869 * r219870;
double r219872 = r219866 - r219871;
double r219873 = sqrt(r219872);
double r219874 = r219865 + r219873;
double r219875 = 2.0;
double r219876 = r219875 * r219868;
double r219877 = r219874 / r219876;
return r219877;
}
double f(double a, double b, double c) {
double r219878 = b;
double r219879 = -1.2447742914077108e+109;
bool r219880 = r219878 <= r219879;
double r219881 = 1.0;
double r219882 = c;
double r219883 = r219882 / r219878;
double r219884 = a;
double r219885 = r219878 / r219884;
double r219886 = r219883 - r219885;
double r219887 = r219881 * r219886;
double r219888 = 6.485606601696406e-71;
bool r219889 = r219878 <= r219888;
double r219890 = -r219878;
double r219891 = r219878 * r219878;
double r219892 = 4.0;
double r219893 = r219892 * r219884;
double r219894 = r219893 * r219882;
double r219895 = r219891 - r219894;
double r219896 = sqrt(r219895);
double r219897 = r219890 + r219896;
double r219898 = 1.0;
double r219899 = 2.0;
double r219900 = r219899 * r219884;
double r219901 = r219898 / r219900;
double r219902 = r219897 * r219901;
double r219903 = -1.0;
double r219904 = r219903 * r219883;
double r219905 = r219889 ? r219902 : r219904;
double r219906 = r219880 ? r219887 : r219905;
return r219906;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 21.5 |
| Herbie | 10.1 |
if b < -1.2447742914077108e+109Initial program 49.3
Taylor expanded around -inf 4.0
Simplified4.0
if -1.2447742914077108e+109 < b < 6.485606601696406e-71Initial program 13.5
rmApplied div-inv13.6
if 6.485606601696406e-71 < b Initial program 53.3
Taylor expanded around inf 8.4
Final simplification10.1
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))