\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 -2.221067196710922123169723133116561516447 \cdot 10^{149}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 2.898348930695269343280527497904161468201 \cdot 10^{-35}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}, \sqrt{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}, -b\right)}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r5766635 = b;
double r5766636 = -r5766635;
double r5766637 = r5766635 * r5766635;
double r5766638 = 4.0;
double r5766639 = a;
double r5766640 = r5766638 * r5766639;
double r5766641 = c;
double r5766642 = r5766640 * r5766641;
double r5766643 = r5766637 - r5766642;
double r5766644 = sqrt(r5766643);
double r5766645 = r5766636 + r5766644;
double r5766646 = 2.0;
double r5766647 = r5766646 * r5766639;
double r5766648 = r5766645 / r5766647;
return r5766648;
}
double f(double a, double b, double c) {
double r5766649 = b;
double r5766650 = -2.221067196710922e+149;
bool r5766651 = r5766649 <= r5766650;
double r5766652 = c;
double r5766653 = r5766652 / r5766649;
double r5766654 = a;
double r5766655 = r5766649 / r5766654;
double r5766656 = r5766653 - r5766655;
double r5766657 = 1.0;
double r5766658 = r5766656 * r5766657;
double r5766659 = 2.8983489306952693e-35;
bool r5766660 = r5766649 <= r5766659;
double r5766661 = r5766649 * r5766649;
double r5766662 = r5766654 * r5766652;
double r5766663 = 4.0;
double r5766664 = r5766662 * r5766663;
double r5766665 = r5766661 - r5766664;
double r5766666 = sqrt(r5766665);
double r5766667 = sqrt(r5766666);
double r5766668 = -r5766649;
double r5766669 = fma(r5766667, r5766667, r5766668);
double r5766670 = 2.0;
double r5766671 = r5766669 / r5766670;
double r5766672 = r5766671 / r5766654;
double r5766673 = -1.0;
double r5766674 = r5766673 * r5766653;
double r5766675 = r5766660 ? r5766672 : r5766674;
double r5766676 = r5766651 ? r5766658 : r5766675;
return r5766676;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.5 |
| Herbie | 10.7 |
if b < -2.221067196710922e+149Initial program 62.3
Simplified62.3
Taylor expanded around -inf 2.7
Simplified2.7
if -2.221067196710922e+149 < b < 2.8983489306952693e-35Initial program 14.6
Simplified14.6
rmApplied add-sqr-sqrt14.6
Applied sqrt-prod14.8
Applied fma-neg14.8
if 2.8983489306952693e-35 < b Initial program 54.4
Simplified54.4
Taylor expanded around inf 7.3
Final simplification10.7
herbie shell --seed 2019171 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))