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 -2.38038529208034741010033526046896232449 \cdot 10^{232} \lor \neg \left(x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.146831817986485928975089715892198335691 \cdot 10^{254}\right):\\
\;\;\;\;x - \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\
\end{array}double f(double x, double y, double z) {
double r439581 = x;
double r439582 = y;
double r439583 = 1.1283791670955126;
double r439584 = z;
double r439585 = exp(r439584);
double r439586 = r439583 * r439585;
double r439587 = r439581 * r439582;
double r439588 = r439586 - r439587;
double r439589 = r439582 / r439588;
double r439590 = r439581 + r439589;
return r439590;
}
double f(double x, double y, double z) {
double r439591 = x;
double r439592 = y;
double r439593 = 1.1283791670955126;
double r439594 = z;
double r439595 = exp(r439594);
double r439596 = r439593 * r439595;
double r439597 = r439591 * r439592;
double r439598 = r439596 - r439597;
double r439599 = r439592 / r439598;
double r439600 = r439591 + r439599;
double r439601 = -2.3803852920803474e+232;
bool r439602 = r439600 <= r439601;
double r439603 = 6.146831817986486e+254;
bool r439604 = r439600 <= r439603;
double r439605 = !r439604;
bool r439606 = r439602 || r439605;
double r439607 = 1.0;
double r439608 = r439607 / r439591;
double r439609 = r439591 - r439608;
double r439610 = r439606 ? r439609 : r439600;
return r439610;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 3.0 |
|---|---|
| Target | 0.0 |
| Herbie | 0.3 |
if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < -2.3803852920803474e+232 or 6.146831817986486e+254 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) Initial program 18.0
Taylor expanded around inf 1.4
if -2.3803852920803474e+232 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 6.146831817986486e+254Initial program 0.1
Final simplification0.3
herbie shell --seed 2019356
(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)))))