double f(double a, double b, double c) {
double r10125711 = b;
double r10125712 = -r10125711;
double r10125713 = r10125711 * r10125711;
double r10125714 = 4.0;
double r10125715 = a;
double r10125716 = c;
double r10125717 = r10125715 * r10125716;
double r10125718 = r10125714 * r10125717;
double r10125719 = r10125713 - r10125718;
double r10125720 = sqrt(r10125719);
double r10125721 = r10125712 - r10125720;
double r10125722 = 2.0;
double r10125723 = r10125722 * r10125715;
double r10125724 = r10125721 / r10125723;
return r10125724;
}
double f(double a, double b, double c) {
double r10125725 = b;
double r10125726 = -1.2624408798128872e+73;
bool r10125727 = r10125725 <= r10125726;
double r10125728 = c;
double r10125729 = r10125728 / r10125725;
double r10125730 = -r10125729;
double r10125731 = -7.507092554429818e-252;
bool r10125732 = r10125725 <= r10125731;
double r10125733 = a;
double r10125734 = r10125733 * r10125728;
double r10125735 = -0.5;
double r10125736 = r10125734 / r10125735;
double r10125737 = r10125736 / r10125733;
double r10125738 = -1.0;
double r10125739 = r10125725 * r10125725;
double r10125740 = 4.0;
double r10125741 = r10125734 * r10125740;
double r10125742 = r10125739 - r10125741;
double r10125743 = sqrt(r10125742);
double r10125744 = r10125743 - r10125725;
double r10125745 = r10125738 / r10125744;
double r10125746 = r10125737 * r10125745;
double r10125747 = 2.695924339454757e+108;
bool r10125748 = r10125725 <= r10125747;
double r10125749 = -r10125725;
double r10125750 = r10125749 - r10125743;
double r10125751 = r10125750 / r10125733;
double r10125752 = 0.5;
double r10125753 = r10125751 * r10125752;
double r10125754 = r10125749 / r10125733;
double r10125755 = r10125748 ? r10125753 : r10125754;
double r10125756 = r10125732 ? r10125746 : r10125755;
double r10125757 = r10125727 ? r10125730 : r10125756;
return r10125757;
}
\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 -1.2624408798128872 \cdot 10^{+73}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -7.507092554429818 \cdot 10^{-252}:\\
\;\;\;\;\frac{\frac{a \cdot c}{\frac{-1}{2}}}{a} \cdot \frac{-1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}\\
\mathbf{elif}\;b \le 2.695924339454757 \cdot 10^{+108}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{a} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-b}{a}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.5 |
|---|---|
| Target | 20.8 |
| Herbie | 8.8 |
if b < -1.2624408798128872e+73Initial program 57.3
Taylor expanded around -inf 3.1
Simplified3.1
if -1.2624408798128872e+73 < b < -7.507092554429818e-252Initial program 32.1
rmApplied *-un-lft-identity32.1
Applied associate-/l*32.1
rmApplied flip--32.2
Applied associate-/r/32.2
Applied add-sqr-sqrt32.2
Applied times-frac32.3
Simplified16.5
Simplified16.5
if -7.507092554429818e-252 < b < 2.695924339454757e+108Initial program 10.0
rmApplied *-un-lft-identity10.0
Applied associate-/l*10.1
rmApplied *-un-lft-identity10.1
Applied *-un-lft-identity10.1
Applied distribute-lft-out--10.1
Applied times-frac10.1
Applied *-un-lft-identity10.1
Applied times-frac10.1
Simplified10.1
Simplified10.0
if 2.695924339454757e+108 < b Initial program 47.2
rmApplied *-un-lft-identity47.2
Applied associate-/l*47.2
Taylor expanded around 0 3.4
Simplified3.4
Final simplification8.8
herbie shell --seed 2019102
(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)))