\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 r680213 = x;
double r680214 = y;
double r680215 = z;
double r680216 = r680214 * r680215;
double r680217 = t;
double r680218 = r680216 / r680217;
double r680219 = r680213 + r680218;
double r680220 = a;
double r680221 = 1.0;
double r680222 = r680220 + r680221;
double r680223 = b;
double r680224 = r680214 * r680223;
double r680225 = r680224 / r680217;
double r680226 = r680222 + r680225;
double r680227 = r680219 / r680226;
return r680227;
}
double f(double x, double y, double z, double t, double a, double b) {
double r680228 = y;
double r680229 = -7.065454724711101e-112;
bool r680230 = r680228 <= r680229;
double r680231 = x;
double r680232 = 1.0;
double r680233 = t;
double r680234 = r680232 / r680233;
double r680235 = z;
double r680236 = r680232 / r680235;
double r680237 = r680234 / r680236;
double r680238 = r680228 * r680237;
double r680239 = r680231 + r680238;
double r680240 = a;
double r680241 = 1.0;
double r680242 = r680240 + r680241;
double r680243 = b;
double r680244 = r680233 / r680243;
double r680245 = r680228 / r680244;
double r680246 = r680242 + r680245;
double r680247 = r680239 / r680246;
double r680248 = 5.680955193031466e-149;
bool r680249 = r680228 <= r680248;
double r680250 = r680228 * r680235;
double r680251 = r680250 / r680233;
double r680252 = cbrt(r680251);
double r680253 = r680252 * r680252;
double r680254 = r680253 * r680252;
double r680255 = r680231 + r680254;
double r680256 = r680228 * r680243;
double r680257 = r680256 / r680233;
double r680258 = r680242 + r680257;
double r680259 = r680255 / r680258;
double r680260 = r680233 / r680235;
double r680261 = r680228 / r680260;
double r680262 = r680231 + r680261;
double r680263 = r680262 / r680246;
double r680264 = r680249 ? r680259 : r680263;
double r680265 = r680230 ? r680247 : r680264;
return r680265;
}




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))))