\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -6.175442848374641 \cdot 10^{+103}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -2.5616198420313977 \cdot 10^{-226}:\\
\;\;\;\;\frac{4}{\sqrt{c \cdot \left(-4 \cdot a\right) + b \cdot b} - b} \cdot \left(\frac{1}{2} \cdot c\right)\\
\mathbf{elif}\;b \le 1.8091015183831773 \cdot 10^{+43}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r9899698 = b;
double r9899699 = -r9899698;
double r9899700 = r9899698 * r9899698;
double r9899701 = 4.0;
double r9899702 = a;
double r9899703 = c;
double r9899704 = r9899702 * r9899703;
double r9899705 = r9899701 * r9899704;
double r9899706 = r9899700 - r9899705;
double r9899707 = sqrt(r9899706);
double r9899708 = r9899699 - r9899707;
double r9899709 = 2.0;
double r9899710 = r9899709 * r9899702;
double r9899711 = r9899708 / r9899710;
return r9899711;
}
double f(double a, double b, double c) {
double r9899712 = b;
double r9899713 = -6.175442848374641e+103;
bool r9899714 = r9899712 <= r9899713;
double r9899715 = c;
double r9899716 = r9899715 / r9899712;
double r9899717 = -r9899716;
double r9899718 = -2.5616198420313977e-226;
bool r9899719 = r9899712 <= r9899718;
double r9899720 = 4.0;
double r9899721 = -4.0;
double r9899722 = a;
double r9899723 = r9899721 * r9899722;
double r9899724 = r9899715 * r9899723;
double r9899725 = r9899712 * r9899712;
double r9899726 = r9899724 + r9899725;
double r9899727 = sqrt(r9899726);
double r9899728 = r9899727 - r9899712;
double r9899729 = r9899720 / r9899728;
double r9899730 = 0.5;
double r9899731 = r9899730 * r9899715;
double r9899732 = r9899729 * r9899731;
double r9899733 = 1.8091015183831773e+43;
bool r9899734 = r9899712 <= r9899733;
double r9899735 = -r9899712;
double r9899736 = r9899722 * r9899715;
double r9899737 = r9899736 * r9899720;
double r9899738 = r9899725 - r9899737;
double r9899739 = sqrt(r9899738);
double r9899740 = r9899735 - r9899739;
double r9899741 = 2.0;
double r9899742 = r9899741 * r9899722;
double r9899743 = r9899740 / r9899742;
double r9899744 = r9899712 / r9899722;
double r9899745 = r9899716 - r9899744;
double r9899746 = r9899734 ? r9899743 : r9899745;
double r9899747 = r9899719 ? r9899732 : r9899746;
double r9899748 = r9899714 ? r9899717 : r9899747;
return r9899748;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.5 |
|---|---|
| Target | 21.1 |
| Herbie | 7.3 |
if b < -6.175442848374641e+103Initial program 59.2
Taylor expanded around -inf 2.8
Simplified2.8
if -6.175442848374641e+103 < b < -2.5616198420313977e-226Initial program 35.4
rmApplied flip--35.5
Applied associate-/l/39.6
Simplified20.9
rmApplied times-frac15.9
Simplified8.5
Simplified8.5
if -2.5616198420313977e-226 < b < 1.8091015183831773e+43Initial program 10.6
if 1.8091015183831773e+43 < b Initial program 36.3
Taylor expanded around inf 5.7
Final simplification7.3
herbie shell --seed 2019120
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))