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 - t \cdot \frac{y}{z}\right)}double f(double x, double y, double z, double t) {
double r512241 = x;
double r512242 = y;
double r512243 = 2.0;
double r512244 = r512242 * r512243;
double r512245 = z;
double r512246 = r512244 * r512245;
double r512247 = r512245 * r512243;
double r512248 = r512247 * r512245;
double r512249 = t;
double r512250 = r512242 * r512249;
double r512251 = r512248 - r512250;
double r512252 = r512246 / r512251;
double r512253 = r512241 - r512252;
return r512253;
}
double f(double x, double y, double z, double t) {
double r512254 = x;
double r512255 = y;
double r512256 = 2.0;
double r512257 = r512255 * r512256;
double r512258 = 1.0;
double r512259 = z;
double r512260 = r512256 * r512259;
double r512261 = t;
double r512262 = r512255 / r512259;
double r512263 = r512261 * r512262;
double r512264 = r512260 - r512263;
double r512265 = r512258 * r512264;
double r512266 = r512257 / r512265;
double r512267 = r512254 - r512266;
return r512267;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.6 |
|---|---|
| Target | 0.1 |
| Herbie | 2.3 |
Initial program 11.6
rmApplied associate-/l*6.7
rmApplied *-un-lft-identity6.7
Applied *-un-lft-identity6.7
Applied times-frac6.7
Simplified6.7
Simplified3.0
rmApplied *-un-lft-identity3.0
Applied times-frac2.3
Simplified2.3
Final simplification2.3
herbie shell --seed 2020046 +o rules:numerics
(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)))))