\frac{x - y \cdot z}{t - a \cdot z}\left(x - y \cdot z\right) \cdot \frac{1}{\mathsf{fma}\left(0, z, \mathsf{fma}\left(a, -z, t\right)\right)}double f(double x, double y, double z, double t, double a) {
double r539691 = x;
double r539692 = y;
double r539693 = z;
double r539694 = r539692 * r539693;
double r539695 = r539691 - r539694;
double r539696 = t;
double r539697 = a;
double r539698 = r539697 * r539693;
double r539699 = r539696 - r539698;
double r539700 = r539695 / r539699;
return r539700;
}
double f(double x, double y, double z, double t, double a) {
double r539701 = x;
double r539702 = y;
double r539703 = z;
double r539704 = r539702 * r539703;
double r539705 = r539701 - r539704;
double r539706 = 1.0;
double r539707 = 0.0;
double r539708 = a;
double r539709 = -r539703;
double r539710 = t;
double r539711 = fma(r539708, r539709, r539710);
double r539712 = fma(r539707, r539703, r539711);
double r539713 = r539706 / r539712;
double r539714 = r539705 * r539713;
return r539714;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.1 |
|---|---|
| Target | 1.6 |
| Herbie | 10.2 |
Initial program 10.1
rmApplied add-sqr-sqrt37.5
Applied prod-diff38.5
Simplified12.1
Simplified10.1
rmApplied div-inv10.2
Simplified10.2
Final simplification10.2
herbie shell --seed 2019212 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))