\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -1.00157721529175776 \cdot 10^{-36} \lor \neg \left(y \le 8.0593349417547793 \cdot 10^{-133}\right):\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\frac{\sqrt[3]{t}}{z}}}{\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 r673464 = x;
double r673465 = y;
double r673466 = z;
double r673467 = r673465 * r673466;
double r673468 = t;
double r673469 = r673467 / r673468;
double r673470 = r673464 + r673469;
double r673471 = a;
double r673472 = 1.0;
double r673473 = r673471 + r673472;
double r673474 = b;
double r673475 = r673465 * r673474;
double r673476 = r673475 / r673468;
double r673477 = r673473 + r673476;
double r673478 = r673470 / r673477;
return r673478;
}
double f(double x, double y, double z, double t, double a, double b) {
double r673479 = y;
double r673480 = -1.0015772152917578e-36;
bool r673481 = r673479 <= r673480;
double r673482 = 8.05933494175478e-133;
bool r673483 = r673479 <= r673482;
double r673484 = !r673483;
bool r673485 = r673481 || r673484;
double r673486 = x;
double r673487 = t;
double r673488 = z;
double r673489 = r673487 / r673488;
double r673490 = r673479 / r673489;
double r673491 = r673486 + r673490;
double r673492 = a;
double r673493 = 1.0;
double r673494 = r673492 + r673493;
double r673495 = b;
double r673496 = r673487 / r673495;
double r673497 = r673479 / r673496;
double r673498 = r673494 + r673497;
double r673499 = r673491 / r673498;
double r673500 = 1.0;
double r673501 = cbrt(r673487);
double r673502 = r673501 * r673501;
double r673503 = r673500 / r673502;
double r673504 = r673501 / r673488;
double r673505 = r673479 / r673504;
double r673506 = r673503 * r673505;
double r673507 = r673486 + r673506;
double r673508 = r673479 * r673495;
double r673509 = r673508 / r673487;
double r673510 = r673494 + r673509;
double r673511 = r673507 / r673510;
double r673512 = r673485 ? r673499 : r673511;
return r673512;
}




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.6 |
|---|---|
| Target | 13.1 |
| Herbie | 13.4 |
if y < -1.0015772152917578e-36 or 8.05933494175478e-133 < y Initial program 25.0
rmApplied associate-/l*22.8
rmApplied associate-/l*19.5
if -1.0015772152917578e-36 < y < 8.05933494175478e-133Initial program 2.5
rmApplied associate-/l*7.0
rmApplied *-un-lft-identity7.0
Applied add-cube-cbrt7.2
Applied times-frac7.2
Applied *-un-lft-identity7.2
Applied times-frac3.1
Simplified3.1
Final simplification13.4
herbie shell --seed 2020089 +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))))