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 r328907 = x;
double r328908 = y;
double r328909 = z;
double r328910 = r328909 + r328908;
double r328911 = r328908 / r328910;
double r328912 = log(r328911);
double r328913 = r328908 * r328912;
double r328914 = exp(r328913);
double r328915 = r328914 / r328908;
double r328916 = r328907 + r328915;
return r328916;
}
double f(double x, double y, double z) {
double r328917 = x;
double r328918 = y;
double r328919 = 2.0;
double r328920 = cbrt(r328918);
double r328921 = z;
double r328922 = r328921 + r328918;
double r328923 = cbrt(r328922);
double r328924 = r328920 / r328923;
double r328925 = log(r328924);
double r328926 = r328919 * r328925;
double r328927 = r328926 + r328925;
double r328928 = r328918 * r328927;
double r328929 = exp(r328928);
double r328930 = r328929 / r328918;
double r328931 = r328917 + r328930;
return r328931;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 0.9 |
| Herbie | 0.9 |
Initial program 5.9
rmApplied add-cube-cbrt19.8
Applied add-cube-cbrt5.9
Applied times-frac5.9
Applied log-prod2.1
Simplified0.9
Final simplification0.9
herbie shell --seed 2019304
(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.1154157598e-315) (+ x (/ (exp (/ -1 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y)))
(+ x (/ (exp (* y (log (/ y (+ z y))))) y)))