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 8.58032715339106299894023200120557440118 \cdot 10^{244}:\\
\;\;\;\;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 r471414 = x;
double r471415 = y;
double r471416 = 1.1283791670955126;
double r471417 = z;
double r471418 = exp(r471417);
double r471419 = r471416 * r471418;
double r471420 = r471414 * r471415;
double r471421 = r471419 - r471420;
double r471422 = r471415 / r471421;
double r471423 = r471414 + r471422;
return r471423;
}
double f(double x, double y, double z) {
double r471424 = x;
double r471425 = y;
double r471426 = 1.1283791670955126;
double r471427 = z;
double r471428 = exp(r471427);
double r471429 = r471426 * r471428;
double r471430 = r471424 * r471425;
double r471431 = r471429 - r471430;
double r471432 = r471425 / r471431;
double r471433 = r471424 + r471432;
double r471434 = 8.580327153391063e+244;
bool r471435 = r471433 <= r471434;
double r471436 = 1.0;
double r471437 = r471436 / r471424;
double r471438 = r471424 - r471437;
double r471439 = r471435 ? r471433 : r471438;
return r471439;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.8 |
|---|---|
| Target | 0.0 |
| Herbie | 1.1 |
if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 8.580327153391063e+244Initial program 1.2
if 8.580327153391063e+244 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) Initial program 20.3
Taylor expanded around inf 1.0
Final simplification1.1
herbie shell --seed 2020002
(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)))))