\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 r630636 = x;
double r630637 = y;
double r630638 = z;
double r630639 = r630637 * r630638;
double r630640 = r630636 - r630639;
double r630641 = t;
double r630642 = a;
double r630643 = r630642 * r630638;
double r630644 = r630641 - r630643;
double r630645 = r630640 / r630644;
return r630645;
}
double f(double x, double y, double z, double t, double a) {
double r630646 = x;
double r630647 = 1.0;
double r630648 = t;
double r630649 = a;
double r630650 = z;
double r630651 = r630649 * r630650;
double r630652 = r630648 - r630651;
double r630653 = r630647 / r630652;
double r630654 = r630646 * r630653;
double r630655 = y;
double r630656 = r630648 / r630650;
double r630657 = r630656 - r630649;
double r630658 = r630655 / r630657;
double r630659 = r630654 - r630658;
return r630659;
}




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 div-sub10.5
Simplified8.1
rmApplied clear-num8.2
rmApplied pow18.2
Applied pow18.2
Applied pow-prod-down8.2
Simplified2.8
rmApplied div-inv2.9
Final simplification2.9
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))))