\frac{x - y \cdot z}{t - a \cdot z}x \cdot \frac{1}{t - a \cdot z} - \frac{y}{1 \cdot \left(\frac{t}{z} - a\right)}double f(double x, double y, double z, double t, double a) {
double r624830 = x;
double r624831 = y;
double r624832 = z;
double r624833 = r624831 * r624832;
double r624834 = r624830 - r624833;
double r624835 = t;
double r624836 = a;
double r624837 = r624836 * r624832;
double r624838 = r624835 - r624837;
double r624839 = r624834 / r624838;
return r624839;
}
double f(double x, double y, double z, double t, double a) {
double r624840 = x;
double r624841 = 1.0;
double r624842 = t;
double r624843 = a;
double r624844 = z;
double r624845 = r624843 * r624844;
double r624846 = r624842 - r624845;
double r624847 = r624841 / r624846;
double r624848 = r624840 * r624847;
double r624849 = y;
double r624850 = r624842 / r624844;
double r624851 = r624850 - r624843;
double r624852 = r624841 * r624851;
double r624853 = r624849 / r624852;
double r624854 = r624848 - r624853;
return r624854;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 1.7 |
| Herbie | 3.1 |
Initial program 10.6
rmApplied div-sub10.6
rmApplied associate-/l*8.2
rmApplied *-un-lft-identity8.2
Applied *-un-lft-identity8.2
Applied times-frac8.2
Simplified8.2
Simplified3.1
rmApplied div-inv3.1
Final simplification3.1
herbie shell --seed 2020062 +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))))