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 r394787 = x;
double r394788 = y;
double r394789 = z;
double r394790 = r394789 + r394788;
double r394791 = r394788 / r394790;
double r394792 = log(r394791);
double r394793 = r394788 * r394792;
double r394794 = exp(r394793);
double r394795 = r394794 / r394788;
double r394796 = r394787 + r394795;
return r394796;
}
double f(double x, double y, double z) {
double r394797 = x;
double r394798 = 2.0;
double r394799 = y;
double r394800 = cbrt(r394799);
double r394801 = z;
double r394802 = r394801 + r394799;
double r394803 = cbrt(r394802);
double r394804 = r394800 / r394803;
double r394805 = log(r394804);
double r394806 = r394798 * r394805;
double r394807 = 1.0;
double r394808 = r394806 * r394807;
double r394809 = r394808 * r394799;
double r394810 = r394799 * r394805;
double r394811 = r394809 + r394810;
double r394812 = exp(r394811);
double r394813 = r394812 / r394799;
double r394814 = r394797 + r394813;
return r394814;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 1.2 |
Initial program 6.2
rmApplied add-cube-cbrt19.6
Applied add-cube-cbrt6.2
Applied times-frac6.2
Applied log-prod2.3
Applied distribute-lft-in2.3
Simplified1.2
Final simplification1.2
herbie shell --seed 2019322
(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)))