\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -11426198898.5786876678466796875:\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{elif}\;y \le 6.399239486311505375772837011137183856531 \cdot 10^{-56}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{\frac{y}{t}}{\frac{1}{b}}}\\
\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 r443128 = x;
double r443129 = y;
double r443130 = z;
double r443131 = r443129 * r443130;
double r443132 = t;
double r443133 = r443131 / r443132;
double r443134 = r443128 + r443133;
double r443135 = a;
double r443136 = 1.0;
double r443137 = r443135 + r443136;
double r443138 = b;
double r443139 = r443129 * r443138;
double r443140 = r443139 / r443132;
double r443141 = r443137 + r443140;
double r443142 = r443134 / r443141;
return r443142;
}
double f(double x, double y, double z, double t, double a, double b) {
double r443143 = y;
double r443144 = -11426198898.578688;
bool r443145 = r443143 <= r443144;
double r443146 = x;
double r443147 = z;
double r443148 = t;
double r443149 = r443147 / r443148;
double r443150 = r443143 * r443149;
double r443151 = r443146 + r443150;
double r443152 = a;
double r443153 = 1.0;
double r443154 = r443152 + r443153;
double r443155 = b;
double r443156 = r443155 / r443148;
double r443157 = r443143 * r443156;
double r443158 = r443154 + r443157;
double r443159 = r443151 / r443158;
double r443160 = 6.399239486311505e-56;
bool r443161 = r443143 <= r443160;
double r443162 = r443143 * r443147;
double r443163 = r443162 / r443148;
double r443164 = r443146 + r443163;
double r443165 = r443143 / r443148;
double r443166 = 1.0;
double r443167 = r443166 / r443155;
double r443168 = r443165 / r443167;
double r443169 = r443154 + r443168;
double r443170 = r443164 / r443169;
double r443171 = r443148 / r443147;
double r443172 = r443143 / r443171;
double r443173 = r443146 + r443172;
double r443174 = r443148 / r443155;
double r443175 = r443143 / r443174;
double r443176 = r443154 + r443175;
double r443177 = r443173 / r443176;
double r443178 = r443161 ? r443170 : r443177;
double r443179 = r443145 ? r443159 : r443178;
return r443179;
}




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.5 |
| Herbie | 12.8 |
if y < -11426198898.578688Initial program 30.6
rmApplied associate-/l*27.9
rmApplied *-un-lft-identity27.9
Applied times-frac23.2
Simplified23.2
rmApplied div-inv23.2
Simplified23.2
if -11426198898.578688 < y < 6.399239486311505e-56Initial program 3.7
rmApplied associate-/l*8.0
rmApplied div-inv8.0
Applied associate-/r*3.7
if 6.399239486311505e-56 < y Initial program 26.3
rmApplied associate-/l*23.5
rmApplied associate-/l*19.5
Final simplification12.8
herbie shell --seed 2019323
(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))))