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 1.8133598671607465 \cdot 10^{283}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot z + \left(0.564189583547756279 \cdot {z}^{2} + 1.12837916709551256\right)}\\
\end{array}double f(double x, double y, double z) {
double r570232 = x;
double r570233 = y;
double r570234 = 1.1283791670955126;
double r570235 = z;
double r570236 = exp(r570235);
double r570237 = r570234 * r570236;
double r570238 = r570232 * r570233;
double r570239 = r570237 - r570238;
double r570240 = r570233 / r570239;
double r570241 = r570232 + r570240;
return r570241;
}
double f(double x, double y, double z) {
double r570242 = x;
double r570243 = y;
double r570244 = 1.1283791670955126;
double r570245 = z;
double r570246 = exp(r570245);
double r570247 = r570244 * r570246;
double r570248 = r570242 * r570243;
double r570249 = r570247 - r570248;
double r570250 = r570243 / r570249;
double r570251 = r570242 + r570250;
double r570252 = 1.8133598671607465e+283;
bool r570253 = r570251 <= r570252;
double r570254 = r570244 * r570245;
double r570255 = 0.5641895835477563;
double r570256 = 2.0;
double r570257 = pow(r570245, r570256);
double r570258 = r570255 * r570257;
double r570259 = r570258 + r570244;
double r570260 = r570254 + r570259;
double r570261 = r570243 / r570260;
double r570262 = r570242 + r570261;
double r570263 = r570253 ? r570251 : r570262;
return r570263;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.6 |
|---|---|
| Target | 0.0 |
| Herbie | 1.9 |
if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 1.8133598671607465e+283Initial program 0.9
if 1.8133598671607465e+283 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) Initial program 35.9
Taylor expanded around 0 21.1
Final simplification1.9
herbie shell --seed 2020089
(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)))))