\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -19046739810236461113844667691490800041980:\\
\;\;\;\;\frac{x}{t - a \cdot z} - y \cdot \frac{1}{\frac{t}{z} - a}\\
\mathbf{elif}\;z \le 1.945848017573289371301929976641969901945 \cdot 10^{-41}:\\
\;\;\;\;\frac{x - y \cdot z}{t - a \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{\frac{\frac{t}{z} - a}{y}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r559815 = x;
double r559816 = y;
double r559817 = z;
double r559818 = r559816 * r559817;
double r559819 = r559815 - r559818;
double r559820 = t;
double r559821 = a;
double r559822 = r559821 * r559817;
double r559823 = r559820 - r559822;
double r559824 = r559819 / r559823;
return r559824;
}
double f(double x, double y, double z, double t, double a) {
double r559825 = z;
double r559826 = -1.904673981023646e+40;
bool r559827 = r559825 <= r559826;
double r559828 = x;
double r559829 = t;
double r559830 = a;
double r559831 = r559830 * r559825;
double r559832 = r559829 - r559831;
double r559833 = r559828 / r559832;
double r559834 = y;
double r559835 = 1.0;
double r559836 = r559829 / r559825;
double r559837 = r559836 - r559830;
double r559838 = r559835 / r559837;
double r559839 = r559834 * r559838;
double r559840 = r559833 - r559839;
double r559841 = 1.9458480175732894e-41;
bool r559842 = r559825 <= r559841;
double r559843 = r559834 * r559825;
double r559844 = r559828 - r559843;
double r559845 = r559844 / r559832;
double r559846 = r559837 / r559834;
double r559847 = r559835 / r559846;
double r559848 = r559833 - r559847;
double r559849 = r559842 ? r559845 : r559848;
double r559850 = r559827 ? r559840 : r559849;
return r559850;
}




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.7 |
| Herbie | 1.7 |
if z < -1.904673981023646e+40Initial program 23.0
Simplified23.0
rmApplied div-sub23.0
Simplified14.2
Taylor expanded around 0 2.9
rmApplied div-inv3.1
if -1.904673981023646e+40 < z < 1.9458480175732894e-41Initial program 0.2
Simplified0.2
if 1.9458480175732894e-41 < z Initial program 17.9
Simplified17.9
rmApplied div-sub17.9
Simplified11.7
Taylor expanded around 0 2.9
rmApplied clear-num3.2
Final simplification1.7
herbie shell --seed 2019194
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -32113435955957344.0) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1.0 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))