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 + y \cdot \frac{1}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\
\end{array}double f(double x, double y, double z) {
double r300020 = x;
double r300021 = y;
double r300022 = 1.1283791670955126;
double r300023 = z;
double r300024 = exp(r300023);
double r300025 = r300022 * r300024;
double r300026 = r300020 * r300021;
double r300027 = r300025 - r300026;
double r300028 = r300021 / r300027;
double r300029 = r300020 + r300028;
return r300029;
}
double f(double x, double y, double z) {
double r300030 = z;
double r300031 = exp(r300030);
double r300032 = 0.0;
bool r300033 = r300031 <= r300032;
double r300034 = x;
double r300035 = 1.0;
double r300036 = r300035 / r300034;
double r300037 = r300034 - r300036;
double r300038 = y;
double r300039 = 1.1283791670955126;
double r300040 = r300039 * r300031;
double r300041 = r300034 * r300038;
double r300042 = r300040 - r300041;
double r300043 = r300035 / r300042;
double r300044 = r300038 * r300043;
double r300045 = r300034 + r300044;
double r300046 = r300033 ? r300037 : r300045;
return r300046;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.0 |
|---|---|
| Target | 0.0 |
| Herbie | 1.0 |
if (exp z) < 0.0Initial program 8.2
Taylor expanded around inf 0.0
if 0.0 < (exp z) Initial program 1.3
rmApplied div-inv1.3
Final simplification1.0
herbie shell --seed 2019308
(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)))))