\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -1.75785742273969681 \cdot 10^{-64} \lor \neg \left(t \le 9.46037676463272081 \cdot 10^{-118}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\left(a + 1\right) + \frac{y \cdot b}{t}}{x + \frac{y \cdot z}{t}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r605609 = x;
double r605610 = y;
double r605611 = z;
double r605612 = r605610 * r605611;
double r605613 = t;
double r605614 = r605612 / r605613;
double r605615 = r605609 + r605614;
double r605616 = a;
double r605617 = 1.0;
double r605618 = r605616 + r605617;
double r605619 = b;
double r605620 = r605610 * r605619;
double r605621 = r605620 / r605613;
double r605622 = r605618 + r605621;
double r605623 = r605615 / r605622;
return r605623;
}
double f(double x, double y, double z, double t, double a, double b) {
double r605624 = t;
double r605625 = -1.7578574227396968e-64;
bool r605626 = r605624 <= r605625;
double r605627 = 9.46037676463272e-118;
bool r605628 = r605624 <= r605627;
double r605629 = !r605628;
bool r605630 = r605626 || r605629;
double r605631 = y;
double r605632 = r605631 / r605624;
double r605633 = z;
double r605634 = x;
double r605635 = fma(r605632, r605633, r605634);
double r605636 = a;
double r605637 = 1.0;
double r605638 = r605636 + r605637;
double r605639 = b;
double r605640 = r605624 / r605639;
double r605641 = r605631 / r605640;
double r605642 = r605638 + r605641;
double r605643 = r605635 / r605642;
double r605644 = 1.0;
double r605645 = r605631 * r605639;
double r605646 = r605645 / r605624;
double r605647 = r605638 + r605646;
double r605648 = r605631 * r605633;
double r605649 = r605648 / r605624;
double r605650 = r605634 + r605649;
double r605651 = r605647 / r605650;
double r605652 = r605644 / r605651;
double r605653 = r605630 ? r605643 : r605652;
return r605653;
}




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.8 |
|---|---|
| Target | 13.1 |
| Herbie | 13.6 |
if t < -1.7578574227396968e-64 or 9.46037676463272e-118 < t Initial program 12.0
rmApplied associate-/l*10.0
rmApplied *-un-lft-identity10.0
Applied associate-/r*10.0
Simplified7.1
if -1.7578574227396968e-64 < t < 9.46037676463272e-118Initial program 26.0
rmApplied clear-num26.1
Final simplification13.6
herbie shell --seed 2020024 +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))))