\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -7.065454724711100881523316892095087502286 \cdot 10^{-112}:\\
\;\;\;\;\frac{x + y \cdot \frac{\frac{1}{t}}{\frac{1}{z}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{elif}\;y \le 5.680955193031466208337968211151925843386 \cdot 10^{-149}:\\
\;\;\;\;\frac{x + \left(\sqrt[3]{\frac{y \cdot z}{t}} \cdot \sqrt[3]{\frac{y \cdot z}{t}}\right) \cdot \sqrt[3]{\frac{y \cdot z}{t}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r728915 = x;
double r728916 = y;
double r728917 = z;
double r728918 = r728916 * r728917;
double r728919 = t;
double r728920 = r728918 / r728919;
double r728921 = r728915 + r728920;
double r728922 = a;
double r728923 = 1.0;
double r728924 = r728922 + r728923;
double r728925 = b;
double r728926 = r728916 * r728925;
double r728927 = r728926 / r728919;
double r728928 = r728924 + r728927;
double r728929 = r728921 / r728928;
return r728929;
}
double f(double x, double y, double z, double t, double a, double b) {
double r728930 = y;
double r728931 = -7.065454724711101e-112;
bool r728932 = r728930 <= r728931;
double r728933 = x;
double r728934 = 1.0;
double r728935 = t;
double r728936 = r728934 / r728935;
double r728937 = z;
double r728938 = r728934 / r728937;
double r728939 = r728936 / r728938;
double r728940 = r728930 * r728939;
double r728941 = r728933 + r728940;
double r728942 = a;
double r728943 = 1.0;
double r728944 = r728942 + r728943;
double r728945 = b;
double r728946 = r728935 / r728945;
double r728947 = r728930 / r728946;
double r728948 = r728944 + r728947;
double r728949 = r728941 / r728948;
double r728950 = 5.680955193031466e-149;
bool r728951 = r728930 <= r728950;
double r728952 = r728930 * r728937;
double r728953 = r728952 / r728935;
double r728954 = cbrt(r728953);
double r728955 = r728954 * r728954;
double r728956 = r728955 * r728954;
double r728957 = r728933 + r728956;
double r728958 = r728930 * r728945;
double r728959 = r728958 / r728935;
double r728960 = r728944 + r728959;
double r728961 = r728957 / r728960;
double r728962 = r728935 / r728937;
double r728963 = r728930 / r728962;
double r728964 = r728933 + r728963;
double r728965 = r728964 / r728948;
double r728966 = r728951 ? r728961 : r728965;
double r728967 = r728932 ? r728949 : r728966;
return r728967;
}




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.1 |
|---|---|
| Target | 12.9 |
| Herbie | 13.1 |
if y < -7.065454724711101e-112Initial program 22.8
rmApplied associate-/l*20.6
rmApplied associate-/l*18.2
rmApplied div-inv18.3
rmApplied div-inv18.3
Applied associate-/r*18.3
if -7.065454724711101e-112 < y < 5.680955193031466e-149Initial program 1.7
rmApplied add-cube-cbrt1.9
if 5.680955193031466e-149 < y Initial program 21.5
rmApplied associate-/l*19.5
rmApplied associate-/l*17.4
Final simplification13.1
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))