\frac{x - y \cdot z}{t - a \cdot z}x \cdot \frac{1}{t - a \cdot z} - y \cdot \frac{1}{\frac{t}{z} - a}double f(double x, double y, double z, double t, double a) {
double r794856 = x;
double r794857 = y;
double r794858 = z;
double r794859 = r794857 * r794858;
double r794860 = r794856 - r794859;
double r794861 = t;
double r794862 = a;
double r794863 = r794862 * r794858;
double r794864 = r794861 - r794863;
double r794865 = r794860 / r794864;
return r794865;
}
double f(double x, double y, double z, double t, double a) {
double r794866 = x;
double r794867 = 1.0;
double r794868 = t;
double r794869 = a;
double r794870 = z;
double r794871 = r794869 * r794870;
double r794872 = r794868 - r794871;
double r794873 = r794867 / r794872;
double r794874 = r794866 * r794873;
double r794875 = y;
double r794876 = r794868 / r794870;
double r794877 = r794876 - r794869;
double r794878 = r794867 / r794877;
double r794879 = r794875 * r794878;
double r794880 = r794874 - r794879;
return r794880;
}




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 | 3.0 |
Initial program 10.5
rmApplied div-sub10.5
Simplified8.1
rmApplied clear-num8.2
Taylor expanded around 0 2.9
rmApplied div-inv3.0
Final simplification3.0
herbie shell --seed 2020047 +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))))