\frac{x - y \cdot z}{t - a \cdot z}\frac{\frac{1}{t - a \cdot z}}{\frac{1}{x - y \cdot z}}double f(double x, double y, double z, double t, double a) {
double r999926 = x;
double r999927 = y;
double r999928 = z;
double r999929 = r999927 * r999928;
double r999930 = r999926 - r999929;
double r999931 = t;
double r999932 = a;
double r999933 = r999932 * r999928;
double r999934 = r999931 - r999933;
double r999935 = r999930 / r999934;
return r999935;
}
double f(double x, double y, double z, double t, double a) {
double r999936 = 1.0;
double r999937 = t;
double r999938 = a;
double r999939 = z;
double r999940 = r999938 * r999939;
double r999941 = r999937 - r999940;
double r999942 = r999936 / r999941;
double r999943 = x;
double r999944 = y;
double r999945 = r999944 * r999939;
double r999946 = r999943 - r999945;
double r999947 = r999936 / r999946;
double r999948 = r999942 / r999947;
return r999948;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.2 |
|---|---|
| Target | 1.6 |
| Herbie | 10.3 |
Initial program 10.2
rmApplied clear-num10.4
rmApplied div-inv10.5
Applied associate-/r*10.3
Final simplification10.3
herbie shell --seed 2019362 +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.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))