x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\begin{array}{l}
\mathbf{if}\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.632641937836763386980494639675229027406 \cdot 10^{145}:\\
\;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{1}{x}\\
\end{array}double f(double x, double y, double z) {
double r451760 = x;
double r451761 = y;
double r451762 = 1.1283791670955126;
double r451763 = z;
double r451764 = exp(r451763);
double r451765 = r451762 * r451764;
double r451766 = r451760 * r451761;
double r451767 = r451765 - r451766;
double r451768 = r451761 / r451767;
double r451769 = r451760 + r451768;
return r451769;
}
double f(double x, double y, double z) {
double r451770 = x;
double r451771 = y;
double r451772 = 1.1283791670955126;
double r451773 = z;
double r451774 = exp(r451773);
double r451775 = r451772 * r451774;
double r451776 = r451770 * r451771;
double r451777 = r451775 - r451776;
double r451778 = r451771 / r451777;
double r451779 = r451770 + r451778;
double r451780 = 6.632641937836763e+145;
bool r451781 = r451779 <= r451780;
double r451782 = 1.0;
double r451783 = r451782 / r451770;
double r451784 = r451770 - r451783;
double r451785 = r451781 ? r451779 : r451784;
return r451785;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.1 |
|---|---|
| Target | 0.0 |
| Herbie | 1.6 |
if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 6.632641937836763e+145Initial program 1.3
if 6.632641937836763e+145 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) Initial program 10.6
Taylor expanded around inf 3.1
Final simplification1.6
herbie shell --seed 2019362
(FPCore (x y z)
:name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(+ x (/ 1 (- (* (/ 1.1283791670955126 y) (exp z)) x)))
(+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))