x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\frac{1}{\left(\frac{5081767996463981}{4503599627370496} \cdot \left(\sqrt[3]{\frac{e^{z}}{y}} \cdot \sqrt[3]{\frac{e^{z}}{y}}\right)\right) \cdot \sqrt[3]{\frac{e^{z}}{y}} - x} + xdouble f(double x, double y, double z) {
double r238972 = x;
double r238973 = y;
double r238974 = 1.1283791670955126;
double r238975 = z;
double r238976 = exp(r238975);
double r238977 = r238974 * r238976;
double r238978 = r238972 * r238973;
double r238979 = r238977 - r238978;
double r238980 = r238973 / r238979;
double r238981 = r238972 + r238980;
return r238981;
}
double f(double x, double y, double z) {
double r238982 = 1.0;
double r238983 = 5081767996463981.0;
double r238984 = 4503599627370496.0;
double r238985 = r238983 / r238984;
double r238986 = z;
double r238987 = exp(r238986);
double r238988 = y;
double r238989 = r238987 / r238988;
double r238990 = cbrt(r238989);
double r238991 = r238990 * r238990;
double r238992 = r238985 * r238991;
double r238993 = r238992 * r238990;
double r238994 = x;
double r238995 = r238993 - r238994;
double r238996 = r238982 / r238995;
double r238997 = r238996 + r238994;
return r238997;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.2 |
Initial program 2.6
rmApplied clear-num2.6
Simplified2.6
rmApplied *-un-lft-identity2.6
Applied *-un-lft-identity2.6
Applied times-frac2.6
Simplified2.6
Simplified0.1
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019304
(FPCore (x y z)
:name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(+ x (/ 1 (- (* (/ 1.12837916709551256 y) (exp z)) x)))
(+ x (/ y (- (* 1.12837916709551256 (exp z)) (* x y)))))