\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;z \le 3.179542260420923888729565121358763298664 \cdot 10^{-214}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{elif}\;z \le 1.23554449704226627892297768932324670802 \cdot 10^{48}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r593091 = x;
double r593092 = y;
double r593093 = z;
double r593094 = r593092 * r593093;
double r593095 = t;
double r593096 = r593094 / r593095;
double r593097 = r593091 + r593096;
double r593098 = a;
double r593099 = 1.0;
double r593100 = r593098 + r593099;
double r593101 = b;
double r593102 = r593092 * r593101;
double r593103 = r593102 / r593095;
double r593104 = r593100 + r593103;
double r593105 = r593097 / r593104;
return r593105;
}
double f(double x, double y, double z, double t, double a, double b) {
double r593106 = z;
double r593107 = 3.179542260420924e-214;
bool r593108 = r593106 <= r593107;
double r593109 = x;
double r593110 = y;
double r593111 = t;
double r593112 = r593111 / r593106;
double r593113 = r593110 / r593112;
double r593114 = r593109 + r593113;
double r593115 = a;
double r593116 = 1.0;
double r593117 = r593115 + r593116;
double r593118 = b;
double r593119 = r593110 * r593118;
double r593120 = r593119 / r593111;
double r593121 = r593117 + r593120;
double r593122 = r593114 / r593121;
double r593123 = 1.2355444970422663e+48;
bool r593124 = r593106 <= r593123;
double r593125 = r593110 * r593106;
double r593126 = r593125 / r593111;
double r593127 = r593109 + r593126;
double r593128 = r593111 / r593118;
double r593129 = r593110 / r593128;
double r593130 = r593117 + r593129;
double r593131 = r593127 / r593130;
double r593132 = 1.0;
double r593133 = r593132 / r593121;
double r593134 = r593127 * r593133;
double r593135 = r593124 ? r593131 : r593134;
double r593136 = r593108 ? r593122 : r593135;
return r593136;
}




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.8 |
| Herbie | 16.1 |
if z < 3.179542260420924e-214Initial program 15.0
rmApplied associate-/l*15.5
if 3.179542260420924e-214 < z < 1.2355444970422663e+48Initial program 11.9
rmApplied associate-/l*10.9
if 1.2355444970422663e+48 < z Initial program 24.1
rmApplied div-inv24.2
Final simplification16.1
herbie shell --seed 2019350
(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))))