x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}\begin{array}{l}
\mathbf{if}\;z \le 2798330066458407314915328 \lor \neg \left(z \le 4.76689686693070055018888846744602636955 \cdot 10^{118}\right):\\
\;\;\;\;x + \frac{\left({\left(\left|\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right|\right)}^{y} \cdot {\left(\left|\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right|\right)}^{y}\right) \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y}}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{{\left(\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{z + y} \cdot \sqrt[3]{z + y}}\right)}^{y} \cdot e^{\frac{-1}{3} \cdot z}}{y}\\
\end{array}double f(double x, double y, double z) {
double r317420 = x;
double r317421 = y;
double r317422 = z;
double r317423 = r317422 + r317421;
double r317424 = r317421 / r317423;
double r317425 = log(r317424);
double r317426 = r317421 * r317425;
double r317427 = exp(r317426);
double r317428 = r317427 / r317421;
double r317429 = r317420 + r317428;
return r317429;
}
double f(double x, double y, double z) {
double r317430 = z;
double r317431 = 2.7983300664584073e+24;
bool r317432 = r317430 <= r317431;
double r317433 = 4.7668968669307006e+118;
bool r317434 = r317430 <= r317433;
double r317435 = !r317434;
bool r317436 = r317432 || r317435;
double r317437 = x;
double r317438 = y;
double r317439 = cbrt(r317438);
double r317440 = r317430 + r317438;
double r317441 = cbrt(r317440);
double r317442 = r317439 / r317441;
double r317443 = fabs(r317442);
double r317444 = pow(r317443, r317438);
double r317445 = r317444 * r317444;
double r317446 = pow(r317442, r317438);
double r317447 = r317445 * r317446;
double r317448 = r317447 / r317438;
double r317449 = r317437 + r317448;
double r317450 = r317439 * r317439;
double r317451 = r317441 * r317441;
double r317452 = r317450 / r317451;
double r317453 = pow(r317452, r317438);
double r317454 = -0.3333333333333333;
double r317455 = r317454 * r317430;
double r317456 = exp(r317455);
double r317457 = r317453 * r317456;
double r317458 = r317457 / r317438;
double r317459 = r317437 + r317458;
double r317460 = r317436 ? r317449 : r317459;
return r317460;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 1.1 |
| Herbie | 2.0 |
if z < 2.7983300664584073e+24 or 4.7668968669307006e+118 < z Initial program 5.9
Simplified5.9
rmApplied add-cube-cbrt19.3
Applied add-cube-cbrt5.9
Applied times-frac5.9
Applied unpow-prod-down1.8
rmApplied add-sqr-sqrt1.8
Applied unpow-prod-down1.8
Simplified1.8
Simplified0.7
if 2.7983300664584073e+24 < z < 4.7668968669307006e+118Initial program 10.9
Simplified10.9
rmApplied add-cube-cbrt17.9
Applied add-cube-cbrt10.9
Applied times-frac10.9
Applied unpow-prod-down6.3
Taylor expanded around inf 18.4
Simplified18.4
Final simplification2.0
herbie shell --seed 2019323
(FPCore (x y z)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, G"
:precision binary64
:herbie-target
(if (< (/ y (+ z y)) 7.1154157597908e-315) (+ x (/ (exp (/ -1 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y)))
(+ x (/ (exp (* y (log (/ y (+ z y))))) y)))