\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.873159407921233748848095007688082806631 \cdot 10^{59} \lor \neg \left(z \le 1.295167332391820426867656083484373540485 \cdot 10^{-63}\right):\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x - y \cdot z}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r471853 = x;
double r471854 = y;
double r471855 = z;
double r471856 = r471854 * r471855;
double r471857 = r471853 - r471856;
double r471858 = t;
double r471859 = a;
double r471860 = r471859 * r471855;
double r471861 = r471858 - r471860;
double r471862 = r471857 / r471861;
return r471862;
}
double f(double x, double y, double z, double t, double a) {
double r471863 = z;
double r471864 = -1.8731594079212337e+59;
bool r471865 = r471863 <= r471864;
double r471866 = 1.2951673323918204e-63;
bool r471867 = r471863 <= r471866;
double r471868 = !r471867;
bool r471869 = r471865 || r471868;
double r471870 = x;
double r471871 = 1.0;
double r471872 = t;
double r471873 = a;
double r471874 = r471873 * r471863;
double r471875 = r471872 - r471874;
double r471876 = r471871 / r471875;
double r471877 = r471870 * r471876;
double r471878 = y;
double r471879 = r471872 / r471863;
double r471880 = r471879 - r471873;
double r471881 = r471878 / r471880;
double r471882 = r471877 - r471881;
double r471883 = r471878 * r471863;
double r471884 = r471870 - r471883;
double r471885 = r471884 / r471875;
double r471886 = r471869 ? r471882 : r471885;
return r471886;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.8 |
| Herbie | 1.9 |
if z < -1.8731594079212337e+59 or 1.2951673323918204e-63 < z Initial program 20.6
rmApplied div-sub20.6
Simplified13.0
rmApplied *-un-lft-identity13.0
Applied associate-*l*13.0
Simplified3.0
rmApplied div-inv3.0
if -1.8731594079212337e+59 < z < 1.2951673323918204e-63Initial program 0.6
Final simplification1.9
herbie shell --seed 2019304
(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.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))