x \cdot \log \left(\frac{x}{y}\right) - z\mathsf{fma}\left(x, \log \left(\frac{\sqrt[3]{x}}{\sqrt[3]{y}}\right) + 2 \cdot \log \left(\frac{\sqrt[3]{x}}{\sqrt[3]{\sqrt[3]{y}} \cdot \left(\sqrt[3]{\sqrt[3]{y}} \cdot \sqrt[3]{\sqrt[3]{y}}\right)}\right), -z\right)double f(double x, double y, double z) {
double r338184 = x;
double r338185 = y;
double r338186 = r338184 / r338185;
double r338187 = log(r338186);
double r338188 = r338184 * r338187;
double r338189 = z;
double r338190 = r338188 - r338189;
return r338190;
}
double f(double x, double y, double z) {
double r338191 = x;
double r338192 = cbrt(r338191);
double r338193 = y;
double r338194 = cbrt(r338193);
double r338195 = r338192 / r338194;
double r338196 = log(r338195);
double r338197 = 2.0;
double r338198 = cbrt(r338194);
double r338199 = r338198 * r338198;
double r338200 = r338198 * r338199;
double r338201 = r338192 / r338200;
double r338202 = log(r338201);
double r338203 = r338197 * r338202;
double r338204 = r338196 + r338203;
double r338205 = z;
double r338206 = -r338205;
double r338207 = fma(r338191, r338204, r338206);
return r338207;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 15.3 |
|---|---|
| Target | 7.8 |
| Herbie | 0.2 |
Initial program 15.3
Simplified15.3
rmApplied add-cube-cbrt15.3
Applied add-cube-cbrt15.3
Applied times-frac15.3
Applied log-prod3.6
Simplified0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019179 +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))