\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 r713683 = x;
double r713684 = y;
double r713685 = z;
double r713686 = r713684 * r713685;
double r713687 = r713683 - r713686;
double r713688 = t;
double r713689 = a;
double r713690 = r713689 * r713685;
double r713691 = r713688 - r713690;
double r713692 = r713687 / r713691;
return r713692;
}
double f(double x, double y, double z, double t, double a) {
double r713693 = x;
double r713694 = 1.0;
double r713695 = t;
double r713696 = a;
double r713697 = z;
double r713698 = r713696 * r713697;
double r713699 = r713695 - r713698;
double r713700 = r713694 / r713699;
double r713701 = r713693 * r713700;
double r713702 = y;
double r713703 = r713695 / r713697;
double r713704 = r713703 - r713696;
double r713705 = r713702 / r713704;
double r713706 = r713701 - r713705;
return r713706;
}




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 *-un-lft-identity10.5
rmApplied div-sub10.5
Simplified10.5
Simplified8.1
rmApplied div-sub8.1
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))))