x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.0:\\
\;\;\;\;x - \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\left(1.128379167095512558560699289955664426088 \cdot z + \left(0.5641895835477562792803496449778322130442 \cdot {z}^{2} + 1.128379167095512558560699289955664426088\right)\right) - x \cdot y}\\
\end{array}double f(double x, double y, double z) {
double r394766 = x;
double r394767 = y;
double r394768 = 1.1283791670955126;
double r394769 = z;
double r394770 = exp(r394769);
double r394771 = r394768 * r394770;
double r394772 = r394766 * r394767;
double r394773 = r394771 - r394772;
double r394774 = r394767 / r394773;
double r394775 = r394766 + r394774;
return r394775;
}
double f(double x, double y, double z) {
double r394776 = z;
double r394777 = exp(r394776);
double r394778 = 0.0;
bool r394779 = r394777 <= r394778;
double r394780 = x;
double r394781 = 1.0;
double r394782 = r394781 / r394780;
double r394783 = r394780 - r394782;
double r394784 = y;
double r394785 = 1.1283791670955126;
double r394786 = r394785 * r394776;
double r394787 = 0.5641895835477563;
double r394788 = 2.0;
double r394789 = pow(r394776, r394788);
double r394790 = r394787 * r394789;
double r394791 = r394790 + r394785;
double r394792 = r394786 + r394791;
double r394793 = r394780 * r394784;
double r394794 = r394792 - r394793;
double r394795 = r394784 / r394794;
double r394796 = r394780 + r394795;
double r394797 = r394779 ? r394783 : r394796;
return r394797;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.8 |
|---|---|
| Target | 0.0 |
| Herbie | 2.5 |
if (exp z) < 0.0Initial program 7.0
Taylor expanded around inf 0.0
if 0.0 < (exp z) Initial program 1.3
Taylor expanded around 0 3.3
Final simplification2.5
herbie shell --seed 2019294
(FPCore (x y z)
:name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(+ x (/ 1 (- (* (/ 1.12837916709551256 y) (exp z)) x)))
(+ x (/ y (- (* 1.12837916709551256 (exp z)) (* x y)))))