\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 -5.58543573862810322 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.3730540219645598 \cdot 10^{-278}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 1.55563303224959 \cdot 10^{106}:\\
\;\;\;\;\frac{1}{\frac{2}{\frac{4}{1} \cdot c} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r191885 = b;
double r191886 = -r191885;
double r191887 = r191885 * r191885;
double r191888 = 4.0;
double r191889 = a;
double r191890 = r191888 * r191889;
double r191891 = c;
double r191892 = r191890 * r191891;
double r191893 = r191887 - r191892;
double r191894 = sqrt(r191893);
double r191895 = r191886 + r191894;
double r191896 = 2.0;
double r191897 = r191896 * r191889;
double r191898 = r191895 / r191897;
return r191898;
}
double f(double a, double b, double c) {
double r191899 = b;
double r191900 = -5.585435738628103e+150;
bool r191901 = r191899 <= r191900;
double r191902 = 1.0;
double r191903 = c;
double r191904 = r191903 / r191899;
double r191905 = a;
double r191906 = r191899 / r191905;
double r191907 = r191904 - r191906;
double r191908 = r191902 * r191907;
double r191909 = -2.3730540219645598e-278;
bool r191910 = r191899 <= r191909;
double r191911 = 1.0;
double r191912 = 2.0;
double r191913 = r191912 * r191905;
double r191914 = -r191899;
double r191915 = r191899 * r191899;
double r191916 = 4.0;
double r191917 = r191916 * r191905;
double r191918 = r191917 * r191903;
double r191919 = r191915 - r191918;
double r191920 = sqrt(r191919);
double r191921 = r191914 + r191920;
double r191922 = r191913 / r191921;
double r191923 = r191911 / r191922;
double r191924 = 1.55563303224959e+106;
bool r191925 = r191899 <= r191924;
double r191926 = r191916 / r191911;
double r191927 = r191926 * r191903;
double r191928 = r191912 / r191927;
double r191929 = r191914 - r191920;
double r191930 = r191928 * r191929;
double r191931 = r191911 / r191930;
double r191932 = -1.0;
double r191933 = r191932 * r191904;
double r191934 = r191925 ? r191931 : r191933;
double r191935 = r191910 ? r191923 : r191934;
double r191936 = r191901 ? r191908 : r191935;
return r191936;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.7 |
| Herbie | 6.9 |
if b < -5.585435738628103e+150Initial program 61.5
Taylor expanded around -inf 2.2
Simplified2.2
if -5.585435738628103e+150 < b < -2.3730540219645598e-278Initial program 8.1
rmApplied clear-num8.3
if -2.3730540219645598e-278 < b < 1.55563303224959e+106Initial program 31.3
rmApplied flip-+31.3
Simplified16.7
rmApplied clear-num16.9
Simplified16.2
rmApplied associate-/l*16.2
Simplified9.9
if 1.55563303224959e+106 < b Initial program 60.3
Taylor expanded around inf 2.7
Final simplification6.9
herbie shell --seed 2020062
(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)))