\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -6.063981578832086470410894573246159834006 \cdot 10^{-35}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{elif}\;t \le 2.89968682653951552104872010503272409208 \cdot 10^{-74}:\\
\;\;\;\;\left(\sqrt[3]{\frac{\frac{y \cdot z}{t} + x}{\left(a + 1\right) + \frac{y \cdot b}{t}}} \cdot \sqrt[3]{\frac{\frac{y \cdot z}{t} + x}{\left(a + 1\right) + \frac{y \cdot b}{t}}}\right) \cdot \sqrt[3]{\frac{\frac{y \cdot z}{t} + x}{\left(a + 1\right) + \frac{y \cdot b}{t}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\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 r480505 = x;
double r480506 = y;
double r480507 = z;
double r480508 = r480506 * r480507;
double r480509 = t;
double r480510 = r480508 / r480509;
double r480511 = r480505 + r480510;
double r480512 = a;
double r480513 = 1.0;
double r480514 = r480512 + r480513;
double r480515 = b;
double r480516 = r480506 * r480515;
double r480517 = r480516 / r480509;
double r480518 = r480514 + r480517;
double r480519 = r480511 / r480518;
return r480519;
}
double f(double x, double y, double z, double t, double a, double b) {
double r480520 = t;
double r480521 = -6.063981578832086e-35;
bool r480522 = r480520 <= r480521;
double r480523 = x;
double r480524 = y;
double r480525 = z;
double r480526 = r480520 / r480525;
double r480527 = r480524 / r480526;
double r480528 = r480523 + r480527;
double r480529 = a;
double r480530 = 1.0;
double r480531 = r480529 + r480530;
double r480532 = b;
double r480533 = r480524 * r480532;
double r480534 = r480533 / r480520;
double r480535 = r480531 + r480534;
double r480536 = r480528 / r480535;
double r480537 = 2.8996868265395155e-74;
bool r480538 = r480520 <= r480537;
double r480539 = r480524 * r480525;
double r480540 = r480539 / r480520;
double r480541 = r480540 + r480523;
double r480542 = r480541 / r480535;
double r480543 = cbrt(r480542);
double r480544 = r480543 * r480543;
double r480545 = r480544 * r480543;
double r480546 = r480525 / r480520;
double r480547 = r480524 * r480546;
double r480548 = r480523 + r480547;
double r480549 = r480548 / r480535;
double r480550 = r480538 ? r480545 : r480549;
double r480551 = r480522 ? r480536 : r480550;
return r480551;
}




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.3 |
| Herbie | 15.2 |
if t < -6.063981578832086e-35Initial program 11.3
rmApplied associate-/l*8.3
if -6.063981578832086e-35 < t < 2.8996868265395155e-74Initial program 24.5
rmApplied div-inv24.5
rmApplied clear-num24.6
Simplified24.6
rmApplied add-cube-cbrt25.1
Simplified25.1
Simplified25.1
if 2.8996868265395155e-74 < t Initial program 11.3
rmApplied *-un-lft-identity11.3
Applied times-frac9.3
Simplified9.3
Final simplification15.2
herbie shell --seed 2019304
(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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))