\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.361733299857302083043096878302889042354 \cdot 10^{105}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.09136118080059703772253670927164991568 \cdot 10^{-86}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{a \cdot 2} + \frac{\frac{-b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r58704 = b;
double r58705 = -r58704;
double r58706 = r58704 * r58704;
double r58707 = 4.0;
double r58708 = a;
double r58709 = r58707 * r58708;
double r58710 = c;
double r58711 = r58709 * r58710;
double r58712 = r58706 - r58711;
double r58713 = sqrt(r58712);
double r58714 = r58705 + r58713;
double r58715 = 2.0;
double r58716 = r58715 * r58708;
double r58717 = r58714 / r58716;
return r58717;
}
double f(double a, double b, double c) {
double r58718 = b;
double r58719 = -1.361733299857302e+105;
bool r58720 = r58718 <= r58719;
double r58721 = 1.0;
double r58722 = c;
double r58723 = r58722 / r58718;
double r58724 = a;
double r58725 = r58718 / r58724;
double r58726 = r58723 - r58725;
double r58727 = r58721 * r58726;
double r58728 = 3.091361180800597e-86;
bool r58729 = r58718 <= r58728;
double r58730 = r58718 * r58718;
double r58731 = 4.0;
double r58732 = r58731 * r58724;
double r58733 = r58732 * r58722;
double r58734 = r58730 - r58733;
double r58735 = sqrt(r58734);
double r58736 = 2.0;
double r58737 = r58724 * r58736;
double r58738 = r58735 / r58737;
double r58739 = -r58718;
double r58740 = r58739 / r58736;
double r58741 = r58740 / r58724;
double r58742 = r58738 + r58741;
double r58743 = -1.0;
double r58744 = r58743 * r58723;
double r58745 = r58729 ? r58742 : r58744;
double r58746 = r58720 ? r58727 : r58745;
return r58746;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 21.1 |
| Herbie | 10.3 |
if b < -1.361733299857302e+105Initial program 48.6
Simplified48.6
Taylor expanded around -inf 3.6
Simplified3.6
if -1.361733299857302e+105 < b < 3.091361180800597e-86Initial program 12.2
Simplified12.2
rmApplied clear-num12.3
rmApplied div-inv12.4
Applied add-cube-cbrt12.4
Applied times-frac12.3
Simplified12.3
Simplified12.3
rmApplied sub-neg12.3
Applied distribute-lft-in12.3
Simplified12.2
Simplified12.2
if 3.091361180800597e-86 < b Initial program 51.8
Simplified51.8
Taylor expanded around inf 10.7
Final simplification10.3
herbie shell --seed 2019322
(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)))