x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\frac{\sqrt[3]{y}}{\sqrt[3]{e^{z} \cdot 1.128379167095512558560699289955664426088 - x \cdot y}} \cdot \frac{1}{\frac{\sqrt[3]{e^{z} \cdot 1.128379167095512558560699289955664426088 - x \cdot y}}{\sqrt[3]{y}} \cdot \frac{\sqrt[3]{e^{z} \cdot 1.128379167095512558560699289955664426088 - x \cdot y}}{\sqrt[3]{y}}} + xdouble f(double x, double y, double z) {
double r16898886 = x;
double r16898887 = y;
double r16898888 = 1.1283791670955126;
double r16898889 = z;
double r16898890 = exp(r16898889);
double r16898891 = r16898888 * r16898890;
double r16898892 = r16898886 * r16898887;
double r16898893 = r16898891 - r16898892;
double r16898894 = r16898887 / r16898893;
double r16898895 = r16898886 + r16898894;
return r16898895;
}
double f(double x, double y, double z) {
double r16898896 = y;
double r16898897 = cbrt(r16898896);
double r16898898 = z;
double r16898899 = exp(r16898898);
double r16898900 = 1.1283791670955126;
double r16898901 = r16898899 * r16898900;
double r16898902 = x;
double r16898903 = r16898902 * r16898896;
double r16898904 = r16898901 - r16898903;
double r16898905 = cbrt(r16898904);
double r16898906 = r16898897 / r16898905;
double r16898907 = 1.0;
double r16898908 = r16898905 / r16898897;
double r16898909 = r16898908 * r16898908;
double r16898910 = r16898907 / r16898909;
double r16898911 = r16898906 * r16898910;
double r16898912 = r16898911 + r16898902;
return r16898912;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.7 |
|---|---|
| Target | 0.0 |
| Herbie | 3.1 |
Initial program 2.7
rmApplied add-cube-cbrt3.1
Applied add-cube-cbrt3.1
Applied times-frac3.1
rmApplied clear-num3.1
Simplified3.1
Final simplification3.1
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
:herbie-target
(+ x (/ 1.0 (- (* (/ 1.1283791670955126 y) (exp z)) x)))
(+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))