\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -639745286380092860028420096 \lor \neg \left(t \le 1.788239029020921775794321335911618969662 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot 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 r491582 = x;
double r491583 = y;
double r491584 = z;
double r491585 = r491583 * r491584;
double r491586 = t;
double r491587 = r491585 / r491586;
double r491588 = r491582 + r491587;
double r491589 = a;
double r491590 = 1.0;
double r491591 = r491589 + r491590;
double r491592 = b;
double r491593 = r491583 * r491592;
double r491594 = r491593 / r491586;
double r491595 = r491591 + r491594;
double r491596 = r491588 / r491595;
return r491596;
}
double f(double x, double y, double z, double t, double a, double b) {
double r491597 = t;
double r491598 = -6.397452863800929e+26;
bool r491599 = r491597 <= r491598;
double r491600 = 1.7882390290209218e-59;
bool r491601 = r491597 <= r491600;
double r491602 = !r491601;
bool r491603 = r491599 || r491602;
double r491604 = z;
double r491605 = r491604 / r491597;
double r491606 = y;
double r491607 = x;
double r491608 = fma(r491605, r491606, r491607);
double r491609 = r491606 / r491597;
double r491610 = b;
double r491611 = a;
double r491612 = fma(r491609, r491610, r491611);
double r491613 = 1.0;
double r491614 = r491612 + r491613;
double r491615 = r491608 / r491614;
double r491616 = r491606 * r491604;
double r491617 = r491616 / r491597;
double r491618 = r491607 + r491617;
double r491619 = r491611 + r491613;
double r491620 = r491606 * r491610;
double r491621 = r491620 / r491597;
double r491622 = r491619 + r491621;
double r491623 = r491618 / r491622;
double r491624 = r491603 ? r491615 : r491623;
return r491624;
}




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 < -6.397452863800929e+26 or 1.7882390290209218e-59 < t Initial program 11.9
Simplified5.0
rmApplied clear-num5.4
rmApplied *-un-lft-identity5.4
Applied *-un-lft-identity5.4
Applied times-frac5.4
Applied add-cube-cbrt5.4
Applied times-frac5.4
Simplified5.4
Simplified5.0
if -6.397452863800929e+26 < t < 1.7882390290209218e-59Initial program 22.5
Final simplification13.0
herbie shell --seed 2019209 +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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))