x - \frac{\left(y \cdot 2\right) \cdot z}{\left(z \cdot 2\right) \cdot z - y \cdot t}\mathsf{fma}\left(-\frac{2}{z \cdot 2 - y \cdot \frac{t}{z}}, y, x\right)double f(double x, double y, double z, double t) {
double r419503 = x;
double r419504 = y;
double r419505 = 2.0;
double r419506 = r419504 * r419505;
double r419507 = z;
double r419508 = r419506 * r419507;
double r419509 = r419507 * r419505;
double r419510 = r419509 * r419507;
double r419511 = t;
double r419512 = r419504 * r419511;
double r419513 = r419510 - r419512;
double r419514 = r419508 / r419513;
double r419515 = r419503 - r419514;
return r419515;
}
double f(double x, double y, double z, double t) {
double r419516 = 2.0;
double r419517 = z;
double r419518 = r419517 * r419516;
double r419519 = y;
double r419520 = t;
double r419521 = r419520 / r419517;
double r419522 = r419519 * r419521;
double r419523 = r419518 - r419522;
double r419524 = r419516 / r419523;
double r419525 = -r419524;
double r419526 = x;
double r419527 = fma(r419525, r419519, r419526);
return r419527;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 11.3 |
|---|---|
| Target | 0.1 |
| Herbie | 1.0 |
Initial program 11.3
Simplified2.5
rmApplied *-un-lft-identity2.5
Applied times-frac1.0
Simplified1.0
Final simplification1.0
herbie shell --seed 2019209 +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)))))