\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.0461303908572575 \cdot 10^{65}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 2.98127510036099003 \cdot 10^{-264}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 2114787851.2472425:\\
\;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r81730 = b;
double r81731 = -r81730;
double r81732 = r81730 * r81730;
double r81733 = 4.0;
double r81734 = a;
double r81735 = r81733 * r81734;
double r81736 = c;
double r81737 = r81735 * r81736;
double r81738 = r81732 - r81737;
double r81739 = sqrt(r81738);
double r81740 = r81731 + r81739;
double r81741 = 2.0;
double r81742 = r81741 * r81734;
double r81743 = r81740 / r81742;
return r81743;
}
double f(double a, double b, double c) {
double r81744 = b;
double r81745 = -1.0461303908572575e+65;
bool r81746 = r81744 <= r81745;
double r81747 = 1.0;
double r81748 = c;
double r81749 = r81748 / r81744;
double r81750 = a;
double r81751 = r81744 / r81750;
double r81752 = r81749 - r81751;
double r81753 = r81747 * r81752;
double r81754 = 2.98127510036099e-264;
bool r81755 = r81744 <= r81754;
double r81756 = 1.0;
double r81757 = 2.0;
double r81758 = r81757 * r81750;
double r81759 = -r81744;
double r81760 = r81744 * r81744;
double r81761 = 4.0;
double r81762 = r81761 * r81750;
double r81763 = r81762 * r81748;
double r81764 = r81760 - r81763;
double r81765 = sqrt(r81764);
double r81766 = r81759 + r81765;
double r81767 = r81758 / r81766;
double r81768 = r81756 / r81767;
double r81769 = 2114787851.2472425;
bool r81770 = r81744 <= r81769;
double r81771 = 2.0;
double r81772 = pow(r81744, r81771);
double r81773 = r81772 - r81772;
double r81774 = r81750 * r81748;
double r81775 = r81761 * r81774;
double r81776 = r81773 + r81775;
double r81777 = r81776 / r81758;
double r81778 = r81759 - r81765;
double r81779 = r81777 / r81778;
double r81780 = -1.0;
double r81781 = r81780 * r81749;
double r81782 = r81770 ? r81779 : r81781;
double r81783 = r81755 ? r81768 : r81782;
double r81784 = r81746 ? r81753 : r81783;
return r81784;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.0 |
| Herbie | 9.1 |
if b < -1.0461303908572575e+65Initial program 41.3
Taylor expanded around -inf 4.6
Simplified4.6
if -1.0461303908572575e+65 < b < 2.98127510036099e-264Initial program 10.7
rmApplied clear-num10.8
if 2.98127510036099e-264 < b < 2114787851.2472425Initial program 27.8
rmApplied clear-num27.8
rmApplied flip-+27.8
Applied associate-/r/27.9
Applied associate-/r*27.9
Simplified17.7
if 2114787851.2472425 < b Initial program 56.3
Taylor expanded around inf 4.8
Final simplification9.1
herbie shell --seed 2020059
(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)))