\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\frac{\mathsf{fma}\left(y, \frac{z}{\mathsf{fma}\left(z, t, -x\right)}, x\right) - \frac{x}{\mathsf{fma}\left(z, t, -x\right)}}{x + 1}}{x - 1} \cdot \left(x - 1\right)double f(double x, double y, double z, double t) {
double r812694 = x;
double r812695 = y;
double r812696 = z;
double r812697 = r812695 * r812696;
double r812698 = r812697 - r812694;
double r812699 = t;
double r812700 = r812699 * r812696;
double r812701 = r812700 - r812694;
double r812702 = r812698 / r812701;
double r812703 = r812694 + r812702;
double r812704 = 1.0;
double r812705 = r812694 + r812704;
double r812706 = r812703 / r812705;
return r812706;
}
double f(double x, double y, double z, double t) {
double r812707 = y;
double r812708 = z;
double r812709 = t;
double r812710 = x;
double r812711 = -r812710;
double r812712 = fma(r812708, r812709, r812711);
double r812713 = r812708 / r812712;
double r812714 = fma(r812707, r812713, r812710);
double r812715 = r812710 / r812712;
double r812716 = r812714 - r812715;
double r812717 = 1.0;
double r812718 = r812710 + r812717;
double r812719 = r812716 / r812718;
double r812720 = r812710 - r812717;
double r812721 = r812719 / r812720;
double r812722 = r812721 * r812720;
return r812722;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.4 |
|---|---|
| Target | 0.4 |
| Herbie | 2.3 |
Initial program 7.4
rmApplied div-sub7.4
Simplified2.3
rmApplied div-inv2.3
Simplified2.3
rmApplied flip-+18.6
Applied associate-/r/18.6
Simplified2.3
Final simplification2.3
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))