\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -2.6145555044474293 \cdot 10^{-55}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{elif}\;t \le 5.30891579653489513 \cdot 10^{72}:\\
\;\;\;\;\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1 \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r697495 = x;
double r697496 = y;
double r697497 = z;
double r697498 = r697496 * r697497;
double r697499 = t;
double r697500 = r697498 / r697499;
double r697501 = r697495 + r697500;
double r697502 = a;
double r697503 = 1.0;
double r697504 = r697502 + r697503;
double r697505 = b;
double r697506 = r697496 * r697505;
double r697507 = r697506 / r697499;
double r697508 = r697504 + r697507;
double r697509 = r697501 / r697508;
return r697509;
}
double f(double x, double y, double z, double t, double a, double b) {
double r697510 = t;
double r697511 = -2.6145555044474293e-55;
bool r697512 = r697510 <= r697511;
double r697513 = x;
double r697514 = y;
double r697515 = z;
double r697516 = r697510 / r697515;
double r697517 = r697514 / r697516;
double r697518 = r697513 + r697517;
double r697519 = a;
double r697520 = 1.0;
double r697521 = r697519 + r697520;
double r697522 = b;
double r697523 = r697522 / r697510;
double r697524 = r697514 * r697523;
double r697525 = r697521 + r697524;
double r697526 = r697518 / r697525;
double r697527 = 5.308915796534895e+72;
bool r697528 = r697510 <= r697527;
double r697529 = r697514 * r697515;
double r697530 = 1.0;
double r697531 = r697530 / r697510;
double r697532 = r697529 * r697531;
double r697533 = r697513 + r697532;
double r697534 = r697514 * r697522;
double r697535 = r697534 / r697510;
double r697536 = r697521 + r697535;
double r697537 = r697533 / r697536;
double r697538 = r697514 / r697510;
double r697539 = fma(r697538, r697515, r697513);
double r697540 = r697530 * r697539;
double r697541 = r697540 / r697525;
double r697542 = r697528 ? r697537 : r697541;
double r697543 = r697512 ? r697526 : r697542;
return r697543;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 16.7 |
|---|---|
| Target | 13.4 |
| Herbie | 13.0 |
if t < -2.6145555044474293e-55Initial program 12.2
rmApplied *-un-lft-identity12.2
Applied times-frac9.8
Simplified9.8
rmApplied associate-/l*5.6
if -2.6145555044474293e-55 < t < 5.308915796534895e+72Initial program 21.0
rmApplied div-inv21.0
if 5.308915796534895e+72 < t Initial program 12.3
rmApplied *-un-lft-identity12.3
Applied times-frac8.4
Simplified8.4
rmApplied associate-/l*3.0
rmApplied *-un-lft-identity3.0
Applied *-un-lft-identity3.0
Applied distribute-lft-out3.0
Simplified3.0
Final simplification13.0
herbie shell --seed 2020036 +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))))