x - \frac{\left(y \cdot 2\right) \cdot z}{\left(z \cdot 2\right) \cdot z - y \cdot t}x - \frac{y \cdot 2}{1 \cdot \left(2 \cdot z - \frac{t}{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \frac{y}{\sqrt[3]{z}}\right)}double f(double x, double y, double z, double t) {
double r583976 = x;
double r583977 = y;
double r583978 = 2.0;
double r583979 = r583977 * r583978;
double r583980 = z;
double r583981 = r583979 * r583980;
double r583982 = r583980 * r583978;
double r583983 = r583982 * r583980;
double r583984 = t;
double r583985 = r583977 * r583984;
double r583986 = r583983 - r583985;
double r583987 = r583981 / r583986;
double r583988 = r583976 - r583987;
return r583988;
}
double f(double x, double y, double z, double t) {
double r583989 = x;
double r583990 = y;
double r583991 = 2.0;
double r583992 = r583990 * r583991;
double r583993 = 1.0;
double r583994 = z;
double r583995 = r583991 * r583994;
double r583996 = t;
double r583997 = cbrt(r583994);
double r583998 = r583997 * r583997;
double r583999 = r583996 / r583998;
double r584000 = r583990 / r583997;
double r584001 = r583999 * r584000;
double r584002 = r583995 - r584001;
double r584003 = r583993 * r584002;
double r584004 = r583992 / r584003;
double r584005 = r583989 - r584004;
return r584005;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.6 |
|---|---|
| Target | 0.1 |
| Herbie | 1.8 |
Initial program 11.6
rmApplied associate-/l*6.6
rmApplied *-un-lft-identity6.6
Applied *-un-lft-identity6.6
Applied times-frac6.6
Simplified6.6
Simplified3.1
rmApplied add-cube-cbrt3.2
Applied times-frac1.8
Final simplification1.8
herbie shell --seed 2020065
(FPCore (x y z t)
:name "Numeric.AD.Rank1.Halley:findZero from ad-4.2.4"
:precision binary64
:herbie-target
(- x (/ 1 (- (/ z y) (/ (/ t 2) z))))
(- x (/ (* (* y 2) z) (- (* (* z 2) z) (* y t)))))