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) + \log \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z + y}}\right)\right)}}{y}double f(double x, double y, double z) {
double r585601 = x;
double r585602 = y;
double r585603 = z;
double r585604 = r585603 + r585602;
double r585605 = r585602 / r585604;
double r585606 = log(r585605);
double r585607 = r585602 * r585606;
double r585608 = exp(r585607);
double r585609 = r585608 / r585602;
double r585610 = r585601 + r585609;
return r585610;
}
double f(double x, double y, double z) {
double r585611 = x;
double r585612 = y;
double r585613 = 2.0;
double r585614 = cbrt(r585612);
double r585615 = z;
double r585616 = r585615 + r585612;
double r585617 = cbrt(r585616);
double r585618 = r585614 / r585617;
double r585619 = log(r585618);
double r585620 = r585613 * r585619;
double r585621 = r585620 + r585619;
double r585622 = r585612 * r585621;
double r585623 = exp(r585622);
double r585624 = r585623 / r585612;
double r585625 = r585611 + r585624;
return r585625;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 1.2 |
| Herbie | 1.2 |
Initial program 6.4
rmApplied add-cube-cbrt19.2
Applied add-cube-cbrt6.4
Applied times-frac6.4
Applied log-prod2.2
Simplified1.2
Final simplification1.2
herbie shell --seed 2019351 +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)))