\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;z \le -4.4005240874132211 \cdot 10^{-116} \lor \neg \left(z \le 1.12880810670166501 \cdot 10^{-262}\right):\\
\;\;\;\;\frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\left(a + 1\right) + \frac{y}{t} \cdot b}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + y \cdot \frac{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 r744605 = x;
double r744606 = y;
double r744607 = z;
double r744608 = r744606 * r744607;
double r744609 = t;
double r744610 = r744608 / r744609;
double r744611 = r744605 + r744610;
double r744612 = a;
double r744613 = 1.0;
double r744614 = r744612 + r744613;
double r744615 = b;
double r744616 = r744606 * r744615;
double r744617 = r744616 / r744609;
double r744618 = r744614 + r744617;
double r744619 = r744611 / r744618;
return r744619;
}
double f(double x, double y, double z, double t, double a, double b) {
double r744620 = z;
double r744621 = -4.400524087413221e-116;
bool r744622 = r744620 <= r744621;
double r744623 = 1.128808106701665e-262;
bool r744624 = r744620 <= r744623;
double r744625 = !r744624;
bool r744626 = r744622 || r744625;
double r744627 = x;
double r744628 = 1.0;
double r744629 = t;
double r744630 = y;
double r744631 = r744629 / r744630;
double r744632 = r744631 / r744620;
double r744633 = r744628 / r744632;
double r744634 = r744627 + r744633;
double r744635 = a;
double r744636 = 1.0;
double r744637 = r744635 + r744636;
double r744638 = r744630 / r744629;
double r744639 = b;
double r744640 = r744638 * r744639;
double r744641 = r744637 + r744640;
double r744642 = r744634 / r744641;
double r744643 = r744620 / r744629;
double r744644 = r744630 * r744643;
double r744645 = r744627 + r744644;
double r744646 = r744630 * r744639;
double r744647 = r744646 / r744629;
double r744648 = r744637 + r744647;
double r744649 = r744645 / r744648;
double r744650 = r744626 ? r744642 : r744649;
return r744650;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 16.8 |
|---|---|
| Target | 13.6 |
| Herbie | 13.8 |
if z < -4.400524087413221e-116 or 1.128808106701665e-262 < z Initial program 19.3
rmApplied associate-/l*19.7
rmApplied associate-/r/18.4
rmApplied clear-num18.4
rmApplied associate-/r*15.6
if -4.400524087413221e-116 < z < 1.128808106701665e-262Initial program 7.4
rmApplied *-un-lft-identity7.4
Applied times-frac7.1
Simplified7.1
Final simplification13.8
herbie shell --seed 2020060
(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))))