x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}x + \frac{e^{y \cdot \left(2 \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)\right)} \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y}}{y}double f(double x, double y, double z) {
double r475471 = x;
double r475472 = y;
double r475473 = z;
double r475474 = r475473 + r475472;
double r475475 = r475472 / r475474;
double r475476 = log(r475475);
double r475477 = r475472 * r475476;
double r475478 = exp(r475477);
double r475479 = r475478 / r475472;
double r475480 = r475471 + r475479;
return r475480;
}
double f(double x, double y, double z) {
double r475481 = x;
double r475482 = y;
double r475483 = 2.0;
double r475484 = cbrt(r475482);
double r475485 = z;
double r475486 = r475485 + r475482;
double r475487 = cbrt(r475486);
double r475488 = r475484 / r475487;
double r475489 = log(r475488);
double r475490 = r475483 * r475489;
double r475491 = r475482 * r475490;
double r475492 = exp(r475491);
double r475493 = pow(r475488, r475482);
double r475494 = r475492 * r475493;
double r475495 = r475494 / r475482;
double r475496 = r475481 + r475495;
return r475496;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 1.0 |
| Herbie | 1.0 |
Initial program 5.8
Simplified5.8
rmApplied add-cube-cbrt19.3
Applied add-cube-cbrt5.8
Applied times-frac5.8
Applied unpow-prod-down2.0
rmApplied add-exp-log40.2
Applied add-exp-log40.2
Applied prod-exp40.3
Applied add-exp-log40.2
Applied add-exp-log36.1
Applied prod-exp32.0
Applied div-exp32.0
Applied pow-exp31.5
Simplified1.0
Final simplification1.0
herbie shell --seed 2019350 +o rules:numerics
(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)))