x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\begin{array}{l}
\mathbf{if}\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y} \le 9.9084596448657439 \cdot 10^{147}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{1}{x}\\
\end{array}double f(double x, double y, double z) {
double r445490 = x;
double r445491 = y;
double r445492 = 1.1283791670955126;
double r445493 = z;
double r445494 = exp(r445493);
double r445495 = r445492 * r445494;
double r445496 = r445490 * r445491;
double r445497 = r445495 - r445496;
double r445498 = r445491 / r445497;
double r445499 = r445490 + r445498;
return r445499;
}
double f(double x, double y, double z) {
double r445500 = x;
double r445501 = y;
double r445502 = 1.1283791670955126;
double r445503 = z;
double r445504 = exp(r445503);
double r445505 = r445502 * r445504;
double r445506 = r445500 * r445501;
double r445507 = r445505 - r445506;
double r445508 = r445501 / r445507;
double r445509 = r445500 + r445508;
double r445510 = 9.908459644865744e+147;
bool r445511 = r445509 <= r445510;
double r445512 = 1.0;
double r445513 = r445512 / r445500;
double r445514 = r445500 - r445513;
double r445515 = r445511 ? r445509 : r445514;
return r445515;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.0 |
|---|---|
| Target | 0.0 |
| Herbie | 1.6 |
if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 9.908459644865744e+147Initial program 1.3
if 9.908459644865744e+147 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) Initial program 10.4
Taylor expanded around inf 2.9
Final simplification1.6
herbie shell --seed 2020024
(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)))))