\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -1.728367153749501 \cdot 10^{-199}:\\
\;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\
\mathbf{elif}\;t \le 9.261783680345339 \cdot 10^{-292}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1.0 \cdot 1.0 + a \cdot \left(a - 1.0\right)\right) \cdot \left(b \cdot y\right) + t \cdot \left(\left(1.0 \cdot 1.0\right) \cdot 1.0 + a \cdot \left(a \cdot a\right)\right)} \cdot \left(t \cdot \left(\left(1.0 \cdot 1.0 - a \cdot 1.0\right) + a \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r38827891 = x;
double r38827892 = y;
double r38827893 = z;
double r38827894 = r38827892 * r38827893;
double r38827895 = t;
double r38827896 = r38827894 / r38827895;
double r38827897 = r38827891 + r38827896;
double r38827898 = a;
double r38827899 = 1.0;
double r38827900 = r38827898 + r38827899;
double r38827901 = b;
double r38827902 = r38827892 * r38827901;
double r38827903 = r38827902 / r38827895;
double r38827904 = r38827900 + r38827903;
double r38827905 = r38827897 / r38827904;
return r38827905;
}
double f(double x, double y, double z, double t, double a, double b) {
double r38827906 = t;
double r38827907 = -1.728367153749501e-199;
bool r38827908 = r38827906 <= r38827907;
double r38827909 = x;
double r38827910 = z;
double r38827911 = 1.0;
double r38827912 = y;
double r38827913 = r38827906 / r38827912;
double r38827914 = r38827911 / r38827913;
double r38827915 = r38827910 * r38827914;
double r38827916 = r38827909 + r38827915;
double r38827917 = 1.0;
double r38827918 = a;
double r38827919 = r38827917 + r38827918;
double r38827920 = b;
double r38827921 = r38827913 / r38827920;
double r38827922 = r38827911 / r38827921;
double r38827923 = r38827919 + r38827922;
double r38827924 = r38827916 / r38827923;
double r38827925 = 9.261783680345339e-292;
bool r38827926 = r38827906 <= r38827925;
double r38827927 = r38827912 * r38827910;
double r38827928 = r38827927 / r38827906;
double r38827929 = r38827909 + r38827928;
double r38827930 = r38827917 * r38827917;
double r38827931 = r38827918 - r38827917;
double r38827932 = r38827918 * r38827931;
double r38827933 = r38827930 + r38827932;
double r38827934 = r38827920 * r38827912;
double r38827935 = r38827933 * r38827934;
double r38827936 = r38827930 * r38827917;
double r38827937 = r38827918 * r38827918;
double r38827938 = r38827918 * r38827937;
double r38827939 = r38827936 + r38827938;
double r38827940 = r38827906 * r38827939;
double r38827941 = r38827935 + r38827940;
double r38827942 = r38827929 / r38827941;
double r38827943 = r38827918 * r38827917;
double r38827944 = r38827930 - r38827943;
double r38827945 = r38827944 + r38827937;
double r38827946 = r38827906 * r38827945;
double r38827947 = r38827942 * r38827946;
double r38827948 = r38827926 ? r38827947 : r38827924;
double r38827949 = r38827908 ? r38827924 : r38827948;
return r38827949;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 16.5 |
|---|---|
| Target | 13.1 |
| Herbie | 15.0 |
if t < -1.728367153749501e-199 or 9.261783680345339e-292 < t Initial program 14.9
rmApplied clear-num14.9
rmApplied associate-/r*14.0
rmApplied clear-num14.0
Simplified11.7
rmApplied *-un-lft-identity11.7
Applied associate-/r*11.7
Simplified11.9
if -1.728367153749501e-199 < t < 9.261783680345339e-292Initial program 31.2
rmApplied flip3-+42.2
Applied frac-add42.2
Applied associate-/r/44.1
Simplified44.1
Final simplification15.0
herbie shell --seed 2019162
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))