x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}x + \frac{e^{\left(\left(2 \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)\right) \cdot 1\right) \cdot y + y \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}}{y}double f(double x, double y, double z) {
double r438391 = x;
double r438392 = y;
double r438393 = z;
double r438394 = r438393 + r438392;
double r438395 = r438392 / r438394;
double r438396 = log(r438395);
double r438397 = r438392 * r438396;
double r438398 = exp(r438397);
double r438399 = r438398 / r438392;
double r438400 = r438391 + r438399;
return r438400;
}
double f(double x, double y, double z) {
double r438401 = x;
double r438402 = 2.0;
double r438403 = y;
double r438404 = cbrt(r438403);
double r438405 = z;
double r438406 = r438405 + r438403;
double r438407 = cbrt(r438406);
double r438408 = r438404 / r438407;
double r438409 = log(r438408);
double r438410 = r438402 * r438409;
double r438411 = 1.0;
double r438412 = r438410 * r438411;
double r438413 = r438412 * r438403;
double r438414 = r438403 * r438409;
double r438415 = r438413 + r438414;
double r438416 = exp(r438415);
double r438417 = r438416 / r438403;
double r438418 = r438401 + r438417;
return r438418;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.1 |
| Herbie | 1.1 |
Initial program 5.9
rmApplied add-cube-cbrt19.6
Applied add-cube-cbrt5.9
Applied times-frac5.9
Applied log-prod2.1
Applied distribute-lft-in2.1
Simplified1.1
Final simplification1.1
herbie shell --seed 2020064
(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)))