\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le 20448289036331440:\\
\;\;\;\;\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{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 r646612 = x;
double r646613 = y;
double r646614 = z;
double r646615 = r646613 * r646614;
double r646616 = t;
double r646617 = r646615 / r646616;
double r646618 = r646612 + r646617;
double r646619 = a;
double r646620 = 1.0;
double r646621 = r646619 + r646620;
double r646622 = b;
double r646623 = r646613 * r646622;
double r646624 = r646623 / r646616;
double r646625 = r646621 + r646624;
double r646626 = r646618 / r646625;
return r646626;
}
double f(double x, double y, double z, double t, double a, double b) {
double r646627 = y;
double r646628 = 2.044828903633144e+16;
bool r646629 = r646627 <= r646628;
double r646630 = x;
double r646631 = z;
double r646632 = r646627 * r646631;
double r646633 = t;
double r646634 = r646632 / r646633;
double r646635 = r646630 + r646634;
double r646636 = 1.0;
double r646637 = r646627 / r646633;
double r646638 = b;
double r646639 = a;
double r646640 = 1.0;
double r646641 = r646639 + r646640;
double r646642 = fma(r646637, r646638, r646641);
double r646643 = r646636 / r646642;
double r646644 = r646635 * r646643;
double r646645 = r646633 / r646631;
double r646646 = r646627 / r646645;
double r646647 = r646630 + r646646;
double r646648 = r646627 * r646638;
double r646649 = r646648 / r646633;
double r646650 = r646641 + r646649;
double r646651 = r646647 / r646650;
double r646652 = r646629 ? r646644 : r646651;
return r646652;
}




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.9 |
|---|---|
| Target | 13.6 |
| Herbie | 16.1 |
if y < 2.044828903633144e+16Initial program 12.6
rmApplied div-inv12.7
Simplified12.5
if 2.044828903633144e+16 < y Initial program 30.8
rmApplied associate-/l*28.0
Final simplification16.1
herbie shell --seed 2020039 +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))))