x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}\frac{e^{y \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{y + z}}\right) + \left(y \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{y + z}}\right) + y \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{y + z}}\right)\right)}}{y} + xdouble f(double x, double y, double z) {
double r16523255 = x;
double r16523256 = y;
double r16523257 = z;
double r16523258 = r16523257 + r16523256;
double r16523259 = r16523256 / r16523258;
double r16523260 = log(r16523259);
double r16523261 = r16523256 * r16523260;
double r16523262 = exp(r16523261);
double r16523263 = r16523262 / r16523256;
double r16523264 = r16523255 + r16523263;
return r16523264;
}
double f(double x, double y, double z) {
double r16523265 = y;
double r16523266 = cbrt(r16523265);
double r16523267 = z;
double r16523268 = r16523265 + r16523267;
double r16523269 = cbrt(r16523268);
double r16523270 = r16523266 / r16523269;
double r16523271 = log(r16523270);
double r16523272 = r16523265 * r16523271;
double r16523273 = r16523272 + r16523272;
double r16523274 = r16523272 + r16523273;
double r16523275 = exp(r16523274);
double r16523276 = r16523275 / r16523265;
double r16523277 = x;
double r16523278 = r16523276 + r16523277;
return r16523278;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.0 |
| Herbie | 1.0 |
Initial program 6.0
rmApplied add-cube-cbrt19.1
Applied add-cube-cbrt6.0
Applied times-frac6.0
Applied log-prod2.0
Applied distribute-lft-in2.0
Simplified1.0
Final simplification1.0
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, G"
:herbie-target
(if (< (/ y (+ z y)) 7.1154157597908e-315) (+ x (/ (exp (/ -1.0 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y)))
(+ x (/ (exp (* y (log (/ y (+ z y))))) y)))