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 r354453 = x;
double r354454 = y;
double r354455 = z;
double r354456 = r354455 + r354454;
double r354457 = r354454 / r354456;
double r354458 = log(r354457);
double r354459 = r354454 * r354458;
double r354460 = exp(r354459);
double r354461 = r354460 / r354454;
double r354462 = r354453 + r354461;
return r354462;
}
double f(double x, double y, double z) {
double r354463 = x;
double r354464 = y;
double r354465 = 2.0;
double r354466 = cbrt(r354464);
double r354467 = z;
double r354468 = r354467 + r354464;
double r354469 = cbrt(r354468);
double r354470 = r354466 / r354469;
double r354471 = log(r354470);
double r354472 = r354465 * r354471;
double r354473 = r354472 + r354471;
double r354474 = r354464 * r354473;
double r354475 = exp(r354474);
double r354476 = r354475 / r354464;
double r354477 = r354463 + r354476;
return r354477;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
Initial program 5.8
rmApplied add-cube-cbrt19.2
Applied add-cube-cbrt5.8
Applied times-frac5.8
Applied log-prod2.2
Simplified1.1
Final simplification1.1
herbie shell --seed 2020033 +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)))