x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}x + \frac{e^{\left(2 \cdot \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)\right) \cdot y} \cdot {\left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)}^{y}}{y}double f(double x, double y, double z) {
double r259000 = x;
double r259001 = y;
double r259002 = z;
double r259003 = r259002 + r259001;
double r259004 = r259001 / r259003;
double r259005 = log(r259004);
double r259006 = r259001 * r259005;
double r259007 = exp(r259006);
double r259008 = r259007 / r259001;
double r259009 = r259000 + r259008;
return r259009;
}
double f(double x, double y, double z) {
double r259010 = x;
double r259011 = 2.0;
double r259012 = y;
double r259013 = cbrt(r259012);
double r259014 = z;
double r259015 = r259014 + r259012;
double r259016 = cbrt(r259015);
double r259017 = r259013 / r259016;
double r259018 = log(r259017);
double r259019 = r259011 * r259018;
double r259020 = r259019 * r259012;
double r259021 = exp(r259020);
double r259022 = pow(r259017, r259012);
double r259023 = r259021 * r259022;
double r259024 = r259023 / r259012;
double r259025 = r259010 + r259024;
return r259025;
}




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
Simplified6.0
rmApplied add-cube-cbrt19.3
Applied add-cube-cbrt6.0
Applied times-frac6.0
Applied unpow-prod-down1.9
rmApplied add-exp-log39.5
Applied add-exp-log39.5
Applied prod-exp39.6
Applied add-exp-log39.5
Applied add-exp-log35.4
Applied prod-exp31.5
Applied div-exp31.5
Applied pow-exp31.0
Simplified1.0
Final simplification1.0
herbie shell --seed 2019347 +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)))