\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -1.726406946855666 \cdot 10^{+238}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1.0\right)}\\
\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -1.7605438012672034 \cdot 10^{-260}:\\
\;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\
\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 1.3135635701590148 \cdot 10^{-257}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1.0\right)}\\
\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 7.061941886181377 \cdot 10^{+145}:\\
\;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1.0\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r29869505 = x;
double r29869506 = y;
double r29869507 = z;
double r29869508 = r29869506 * r29869507;
double r29869509 = t;
double r29869510 = r29869508 / r29869509;
double r29869511 = r29869505 + r29869510;
double r29869512 = a;
double r29869513 = 1.0;
double r29869514 = r29869512 + r29869513;
double r29869515 = b;
double r29869516 = r29869506 * r29869515;
double r29869517 = r29869516 / r29869509;
double r29869518 = r29869514 + r29869517;
double r29869519 = r29869511 / r29869518;
return r29869519;
}
double f(double x, double y, double z, double t, double a, double b) {
double r29869520 = z;
double r29869521 = y;
double r29869522 = r29869520 * r29869521;
double r29869523 = t;
double r29869524 = r29869522 / r29869523;
double r29869525 = x;
double r29869526 = r29869524 + r29869525;
double r29869527 = b;
double r29869528 = r29869527 * r29869521;
double r29869529 = r29869528 / r29869523;
double r29869530 = a;
double r29869531 = 1.0;
double r29869532 = r29869530 + r29869531;
double r29869533 = r29869529 + r29869532;
double r29869534 = r29869526 / r29869533;
double r29869535 = -1.726406946855666e+238;
bool r29869536 = r29869534 <= r29869535;
double r29869537 = r29869520 / r29869523;
double r29869538 = fma(r29869537, r29869521, r29869525);
double r29869539 = r29869521 / r29869523;
double r29869540 = fma(r29869539, r29869527, r29869532);
double r29869541 = r29869538 / r29869540;
double r29869542 = -1.7605438012672034e-260;
bool r29869543 = r29869534 <= r29869542;
double r29869544 = 1.3135635701590148e-257;
bool r29869545 = r29869534 <= r29869544;
double r29869546 = 7.061941886181377e+145;
bool r29869547 = r29869534 <= r29869546;
double r29869548 = r29869547 ? r29869534 : r29869541;
double r29869549 = r29869545 ? r29869541 : r29869548;
double r29869550 = r29869543 ? r29869534 : r29869549;
double r29869551 = r29869536 ? r29869541 : r29869550;
return r29869551;
}




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.0 |
|---|---|
| Target | 13.2 |
| Herbie | 12.6 |
if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -1.726406946855666e+238 or -1.7605438012672034e-260 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 1.3135635701590148e-257 or 7.061941886181377e+145 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) Initial program 34.5
Simplified27.6
rmApplied div-inv27.7
rmApplied associate-*r/27.6
Simplified27.2
if -1.726406946855666e+238 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -1.7605438012672034e-260 or 1.3135635701590148e-257 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 7.061941886181377e+145Initial program 0.4
Final simplification12.6
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))