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(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y} \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\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 r254289 = x;
double r254290 = y;
double r254291 = z;
double r254292 = r254291 + r254290;
double r254293 = r254290 / r254292;
double r254294 = log(r254293);
double r254295 = r254290 * r254294;
double r254296 = exp(r254295);
double r254297 = r254296 / r254290;
double r254298 = r254289 + r254297;
return r254298;
}
double f(double x, double y, double z) {
double r254299 = z;
double r254300 = 2.7983300664584073e+24;
bool r254301 = r254299 <= r254300;
double r254302 = 4.7668968669307006e+118;
bool r254303 = r254299 <= r254302;
double r254304 = !r254303;
bool r254305 = r254301 || r254304;
double r254306 = x;
double r254307 = y;
double r254308 = cbrt(r254307);
double r254309 = r254299 + r254307;
double r254310 = cbrt(r254309);
double r254311 = r254308 / r254310;
double r254312 = pow(r254311, r254307);
double r254313 = r254312 * r254312;
double r254314 = r254313 * r254312;
double r254315 = r254314 / r254307;
double r254316 = r254306 + r254315;
double r254317 = r254308 * r254308;
double r254318 = r254310 * r254310;
double r254319 = r254317 / r254318;
double r254320 = pow(r254319, r254307);
double r254321 = -0.3333333333333333;
double r254322 = r254321 * r254299;
double r254323 = exp(r254322);
double r254324 = r254320 * r254323;
double r254325 = r254324 / r254307;
double r254326 = r254306 + r254325;
double r254327 = r254305 ? r254316 : r254326;
return r254327;
}




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 times-frac1.8
Applied unpow-prod-down0.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)))