\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -9.2159596611983673 \cdot 10^{-15} \lor \neg \left(z \le 3.82302836807757522 \cdot 10^{-132}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{t - a \cdot z}{x - z \cdot y}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r704011 = x;
double r704012 = y;
double r704013 = z;
double r704014 = r704012 * r704013;
double r704015 = r704011 - r704014;
double r704016 = t;
double r704017 = a;
double r704018 = r704017 * r704013;
double r704019 = r704016 - r704018;
double r704020 = r704015 / r704019;
return r704020;
}
double f(double x, double y, double z, double t, double a) {
double r704021 = z;
double r704022 = -9.215959661198367e-15;
bool r704023 = r704021 <= r704022;
double r704024 = 3.823028368077575e-132;
bool r704025 = r704021 <= r704024;
double r704026 = !r704025;
bool r704027 = r704023 || r704026;
double r704028 = x;
double r704029 = t;
double r704030 = a;
double r704031 = r704030 * r704021;
double r704032 = r704029 - r704031;
double r704033 = r704028 / r704032;
double r704034 = y;
double r704035 = r704029 / r704021;
double r704036 = r704035 - r704030;
double r704037 = r704034 / r704036;
double r704038 = r704033 - r704037;
double r704039 = 1.0;
double r704040 = r704021 * r704034;
double r704041 = r704028 - r704040;
double r704042 = r704032 / r704041;
double r704043 = r704039 / r704042;
double r704044 = r704027 ? r704038 : r704043;
return r704044;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.0 |
|---|---|
| Target | 1.5 |
| Herbie | 1.7 |
if z < -9.215959661198367e-15 or 3.823028368077575e-132 < z Initial program 16.4
rmApplied div-sub16.4
Simplified10.5
rmApplied clear-num10.6
rmApplied *-un-lft-identity10.6
Applied associate-*l*10.6
Simplified2.5
if -9.215959661198367e-15 < z < 3.823028368077575e-132Initial program 0.1
rmApplied clear-num0.5
Simplified0.5
Final simplification1.7
herbie shell --seed 2020045
(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))))