\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 r104860 = b;
double r104861 = -r104860;
double r104862 = r104860 * r104860;
double r104863 = 4.0;
double r104864 = a;
double r104865 = r104863 * r104864;
double r104866 = c;
double r104867 = r104865 * r104866;
double r104868 = r104862 - r104867;
double r104869 = sqrt(r104868);
double r104870 = r104861 + r104869;
double r104871 = 2.0;
double r104872 = r104871 * r104864;
double r104873 = r104870 / r104872;
return r104873;
}
double f(double a, double b, double c) {
double r104874 = b;
double r104875 = -1.2447742914077108e+109;
bool r104876 = r104874 <= r104875;
double r104877 = 1.0;
double r104878 = c;
double r104879 = r104878 / r104874;
double r104880 = a;
double r104881 = r104874 / r104880;
double r104882 = r104879 - r104881;
double r104883 = r104877 * r104882;
double r104884 = 6.485606601696406e-71;
bool r104885 = r104874 <= r104884;
double r104886 = -r104874;
double r104887 = r104874 * r104874;
double r104888 = 4.0;
double r104889 = r104888 * r104880;
double r104890 = r104889 * r104878;
double r104891 = r104887 - r104890;
double r104892 = sqrt(r104891);
double r104893 = r104886 + r104892;
double r104894 = 1.0;
double r104895 = 2.0;
double r104896 = r104895 * r104880;
double r104897 = r104894 / r104896;
double r104898 = r104893 * r104897;
double r104899 = -1.0;
double r104900 = r104899 * r104879;
double r104901 = r104885 ? r104898 : r104900;
double r104902 = r104876 ? r104883 : r104901;
return r104902;
}




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)))