\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}}{x + 1}double f(double x, double y, double z, double t) {
double r532661 = x;
double r532662 = y;
double r532663 = z;
double r532664 = r532662 * r532663;
double r532665 = r532664 - r532661;
double r532666 = t;
double r532667 = r532666 * r532663;
double r532668 = r532667 - r532661;
double r532669 = r532665 / r532668;
double r532670 = r532661 + r532669;
double r532671 = 1.0;
double r532672 = r532661 + r532671;
double r532673 = r532670 / r532672;
return r532673;
}
double f(double x, double y, double z, double t) {
double r532674 = y;
double r532675 = t;
double r532676 = z;
double r532677 = r532675 * r532676;
double r532678 = x;
double r532679 = r532677 - r532678;
double r532680 = r532674 / r532679;
double r532681 = fma(r532680, r532676, r532678);
double r532682 = r532678 / r532679;
double r532683 = r532681 - r532682;
double r532684 = 1.0;
double r532685 = r532678 + r532684;
double r532686 = r532683 / r532685;
return r532686;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.3 |
|---|---|
| Target | 0.4 |
| Herbie | 4.3 |
Initial program 7.3
rmApplied div-sub7.3
Applied associate-+r-7.3
Simplified4.3
Final simplification4.3
herbie shell --seed 2019209 +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)))