\frac{x - y \cdot z}{t - a \cdot z}\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}double f(double x, double y, double z, double t, double a) {
double r844800 = x;
double r844801 = y;
double r844802 = z;
double r844803 = r844801 * r844802;
double r844804 = r844800 - r844803;
double r844805 = t;
double r844806 = a;
double r844807 = r844806 * r844802;
double r844808 = r844805 - r844807;
double r844809 = r844804 / r844808;
return r844809;
}
double f(double x, double y, double z, double t, double a) {
double r844810 = x;
double r844811 = t;
double r844812 = a;
double r844813 = z;
double r844814 = r844812 * r844813;
double r844815 = r844811 - r844814;
double r844816 = r844810 / r844815;
double r844817 = y;
double r844818 = r844811 / r844813;
double r844819 = r844818 - r844812;
double r844820 = r844817 / r844819;
double r844821 = r844816 - r844820;
return r844821;
}




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.8 |
Initial program 10.5
rmApplied div-sub10.5
Simplified8.1
rmApplied clear-num8.2
Taylor expanded around 0 2.9
rmApplied pow12.9
Applied pow12.9
Applied pow-prod-down2.9
Simplified2.8
Final simplification2.8
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))))