x \cdot \log \left(\frac{x}{y}\right) - z\left(\log \left(\frac{\sqrt[3]{x}}{\sqrt[3]{y}}\right) \cdot x + x \cdot \left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) - \log \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right)\right)\right) - zdouble f(double x, double y, double z) {
double r20386261 = x;
double r20386262 = y;
double r20386263 = r20386261 / r20386262;
double r20386264 = log(r20386263);
double r20386265 = r20386261 * r20386264;
double r20386266 = z;
double r20386267 = r20386265 - r20386266;
return r20386267;
}
double f(double x, double y, double z) {
double r20386268 = x;
double r20386269 = cbrt(r20386268);
double r20386270 = y;
double r20386271 = cbrt(r20386270);
double r20386272 = r20386269 / r20386271;
double r20386273 = log(r20386272);
double r20386274 = r20386273 * r20386268;
double r20386275 = r20386269 * r20386269;
double r20386276 = log(r20386275);
double r20386277 = r20386271 * r20386271;
double r20386278 = log(r20386277);
double r20386279 = r20386276 - r20386278;
double r20386280 = r20386268 * r20386279;
double r20386281 = r20386274 + r20386280;
double r20386282 = z;
double r20386283 = r20386281 - r20386282;
return r20386283;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 15.6 |
|---|---|
| Target | 7.9 |
| Herbie | 0.3 |
Initial program 15.6
rmApplied add-cube-cbrt15.6
Applied add-cube-cbrt15.6
Applied times-frac15.6
Applied log-prod3.7
Applied distribute-lft-in3.7
Simplified3.7
rmApplied frac-times3.7
Applied log-div0.3
Final simplification0.3
herbie shell --seed 2019170 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions.Extra:bd0 from math-functions-0.1.5.2"
:herbie-target
(if (< y 7.595077799083773e-308) (- (* x (log (/ x y))) z) (- (* x (- (log x) (log y))) z))
(- (* x (log (/ x y))) z))