\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 -9.348931433494438 \cdot 10^{+39}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r7033916 = b;
double r7033917 = -r7033916;
double r7033918 = r7033916 * r7033916;
double r7033919 = 4.0;
double r7033920 = a;
double r7033921 = r7033919 * r7033920;
double r7033922 = c;
double r7033923 = r7033921 * r7033922;
double r7033924 = r7033918 - r7033923;
double r7033925 = sqrt(r7033924);
double r7033926 = r7033917 + r7033925;
double r7033927 = 2.0;
double r7033928 = r7033927 * r7033920;
double r7033929 = r7033926 / r7033928;
return r7033929;
}
double f(double a, double b, double c) {
double r7033930 = b;
double r7033931 = -9.348931433494438e+39;
bool r7033932 = r7033930 <= r7033931;
double r7033933 = c;
double r7033934 = r7033933 / r7033930;
double r7033935 = a;
double r7033936 = r7033930 / r7033935;
double r7033937 = r7033934 - r7033936;
double r7033938 = 1.3353078790738604e-121;
bool r7033939 = r7033930 <= r7033938;
double r7033940 = -r7033930;
double r7033941 = r7033930 * r7033930;
double r7033942 = 4.0;
double r7033943 = r7033942 * r7033935;
double r7033944 = r7033933 * r7033943;
double r7033945 = r7033941 - r7033944;
double r7033946 = sqrt(r7033945);
double r7033947 = r7033940 + r7033946;
double r7033948 = 0.5;
double r7033949 = r7033948 / r7033935;
double r7033950 = r7033947 * r7033949;
double r7033951 = 1.6168702840263923e-79;
bool r7033952 = r7033930 <= r7033951;
double r7033953 = -r7033934;
double r7033954 = 1.546013236023957e-67;
bool r7033955 = r7033930 <= r7033954;
double r7033956 = r7033955 ? r7033950 : r7033953;
double r7033957 = r7033952 ? r7033953 : r7033956;
double r7033958 = r7033939 ? r7033950 : r7033957;
double r7033959 = r7033932 ? r7033937 : r7033958;
return r7033959;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.9 |
if b < -9.348931433494438e+39Initial program 34.0
Taylor expanded around -inf 6.2
if -9.348931433494438e+39 < b < 1.3353078790738604e-121 or 1.6168702840263923e-79 < b < 1.546013236023957e-67Initial program 12.9
rmApplied div-inv13.0
Simplified13.0
if 1.3353078790738604e-121 < b < 1.6168702840263923e-79 or 1.546013236023957e-67 < b Initial program 50.8
Taylor expanded around inf 11.2
Simplified11.2
Final simplification10.9
herbie shell --seed 2019158
(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)))