\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 -3.974595954042361881691403492534140168485 \cdot 10^{78}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.1066699921689209753658832131181641309 \cdot 10^{-249}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.329448504580570356283886843099725433358 \cdot 10^{-14}:\\
\;\;\;\;\frac{1 \cdot \frac{4}{\frac{1}{a} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r220667 = b;
double r220668 = -r220667;
double r220669 = r220667 * r220667;
double r220670 = 4.0;
double r220671 = a;
double r220672 = r220670 * r220671;
double r220673 = c;
double r220674 = r220672 * r220673;
double r220675 = r220669 - r220674;
double r220676 = sqrt(r220675);
double r220677 = r220668 + r220676;
double r220678 = 2.0;
double r220679 = r220678 * r220671;
double r220680 = r220677 / r220679;
return r220680;
}
double f(double a, double b, double c) {
double r220681 = b;
double r220682 = -3.974595954042362e+78;
bool r220683 = r220681 <= r220682;
double r220684 = 1.0;
double r220685 = c;
double r220686 = r220685 / r220681;
double r220687 = a;
double r220688 = r220681 / r220687;
double r220689 = r220686 - r220688;
double r220690 = r220684 * r220689;
double r220691 = -3.106669992168921e-249;
bool r220692 = r220681 <= r220691;
double r220693 = -r220681;
double r220694 = r220681 * r220681;
double r220695 = 4.0;
double r220696 = r220695 * r220687;
double r220697 = r220696 * r220685;
double r220698 = r220694 - r220697;
double r220699 = sqrt(r220698);
double r220700 = r220693 + r220699;
double r220701 = 1.0;
double r220702 = 2.0;
double r220703 = r220702 * r220687;
double r220704 = r220701 / r220703;
double r220705 = r220700 * r220704;
double r220706 = 3.3294485045805704e-14;
bool r220707 = r220681 <= r220706;
double r220708 = r220701 / r220687;
double r220709 = r220693 - r220699;
double r220710 = r220709 / r220685;
double r220711 = r220708 * r220710;
double r220712 = r220695 / r220711;
double r220713 = r220701 * r220712;
double r220714 = r220713 / r220703;
double r220715 = -1.0;
double r220716 = r220715 * r220686;
double r220717 = r220707 ? r220714 : r220716;
double r220718 = r220692 ? r220705 : r220717;
double r220719 = r220683 ? r220690 : r220718;
return r220719;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 8.2 |
if b < -3.974595954042362e+78Initial program 41.5
Taylor expanded around -inf 4.2
Simplified4.2
if -3.974595954042362e+78 < b < -3.106669992168921e-249Initial program 8.2
rmApplied div-inv8.3
if -3.106669992168921e-249 < b < 3.3294485045805704e-14Initial program 23.6
rmApplied flip-+23.7
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied *-un-lft-identity17.5
Applied times-frac17.5
Simplified17.5
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied times-frac14.8
if 3.3294485045805704e-14 < b Initial program 55.3
Taylor expanded around inf 5.9
Final simplification8.2
herbie shell --seed 2019352
(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)))