x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\begin{array}{l}
\mathbf{if}\;z \le -744.98628896478272 \lor \neg \left(z \le 1.00942494343838114 \cdot 10^{-88}\right):\\
\;\;\;\;x + \frac{1}{\frac{1.12837916709551256}{\sqrt[3]{{\left(\frac{y}{e^{z}}\right)}^{3}}} - x}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\
\end{array}double f(double x, double y, double z) {
double r487260 = x;
double r487261 = y;
double r487262 = 1.1283791670955126;
double r487263 = z;
double r487264 = exp(r487263);
double r487265 = r487262 * r487264;
double r487266 = r487260 * r487261;
double r487267 = r487265 - r487266;
double r487268 = r487261 / r487267;
double r487269 = r487260 + r487268;
return r487269;
}
double f(double x, double y, double z) {
double r487270 = z;
double r487271 = -744.9862889647827;
bool r487272 = r487270 <= r487271;
double r487273 = 1.0094249434383811e-88;
bool r487274 = r487270 <= r487273;
double r487275 = !r487274;
bool r487276 = r487272 || r487275;
double r487277 = x;
double r487278 = 1.0;
double r487279 = 1.1283791670955126;
double r487280 = y;
double r487281 = exp(r487270);
double r487282 = r487280 / r487281;
double r487283 = 3.0;
double r487284 = pow(r487282, r487283);
double r487285 = cbrt(r487284);
double r487286 = r487279 / r487285;
double r487287 = r487286 - r487277;
double r487288 = r487278 / r487287;
double r487289 = r487277 + r487288;
double r487290 = r487279 * r487281;
double r487291 = r487277 * r487280;
double r487292 = r487290 - r487291;
double r487293 = r487280 / r487292;
double r487294 = r487277 + r487293;
double r487295 = r487276 ? r487289 : r487294;
return r487295;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.9 |
|---|---|
| Target | 0.0 |
| Herbie | 0.5 |
if z < -744.9862889647827 or 1.0094249434383811e-88 < z Initial program 5.0
rmApplied clear-num5.0
rmApplied div-sub5.0
Simplified5.0
Simplified0.0
rmApplied add-cbrt-cube0.0
Applied add-cbrt-cube18.7
Applied cbrt-undiv18.7
Simplified0.9
if -744.9862889647827 < z < 1.0094249434383811e-88Initial program 0.0
Final simplification0.5
herbie shell --seed 2020042
(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)))))