\frac{x - y \cdot z}{t - a \cdot z}x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}double f(double x, double y, double z, double t, double a) {
double r742055 = x;
double r742056 = y;
double r742057 = z;
double r742058 = r742056 * r742057;
double r742059 = r742055 - r742058;
double r742060 = t;
double r742061 = a;
double r742062 = r742061 * r742057;
double r742063 = r742060 - r742062;
double r742064 = r742059 / r742063;
return r742064;
}
double f(double x, double y, double z, double t, double a) {
double r742065 = x;
double r742066 = 1.0;
double r742067 = t;
double r742068 = a;
double r742069 = z;
double r742070 = r742068 * r742069;
double r742071 = r742067 - r742070;
double r742072 = r742066 / r742071;
double r742073 = r742065 * r742072;
double r742074 = y;
double r742075 = r742067 / r742069;
double r742076 = r742075 - r742068;
double r742077 = r742074 / r742076;
double r742078 = r742073 - r742077;
return r742078;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.5 |
|---|---|
| Target | 1.6 |
| Herbie | 2.9 |
Initial program 10.5
rmApplied div-sub10.5
Simplified8.1
rmApplied clear-num8.2
rmApplied *-un-lft-identity8.2
Applied associate-*l*8.2
Simplified2.8
rmApplied div-inv2.9
Final simplification2.9
herbie shell --seed 2020047
(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.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))