\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -68868865494452635959296 \lor \neg \left(t \le 1.217919208020054508540242037506414565954 \cdot 10^{-40}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\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 r934759 = x;
double r934760 = y;
double r934761 = z;
double r934762 = r934760 * r934761;
double r934763 = t;
double r934764 = r934762 / r934763;
double r934765 = r934759 + r934764;
double r934766 = a;
double r934767 = 1.0;
double r934768 = r934766 + r934767;
double r934769 = b;
double r934770 = r934760 * r934769;
double r934771 = r934770 / r934763;
double r934772 = r934768 + r934771;
double r934773 = r934765 / r934772;
return r934773;
}
double f(double x, double y, double z, double t, double a, double b) {
double r934774 = t;
double r934775 = -6.886886549445264e+22;
bool r934776 = r934774 <= r934775;
double r934777 = 1.2179192080200545e-40;
bool r934778 = r934774 <= r934777;
double r934779 = !r934778;
bool r934780 = r934776 || r934779;
double r934781 = y;
double r934782 = r934781 / r934774;
double r934783 = z;
double r934784 = x;
double r934785 = fma(r934782, r934783, r934784);
double r934786 = 1.0;
double r934787 = b;
double r934788 = a;
double r934789 = fma(r934782, r934787, r934788);
double r934790 = 1.0;
double r934791 = r934789 + r934790;
double r934792 = r934786 / r934791;
double r934793 = r934785 * r934792;
double r934794 = r934781 * r934783;
double r934795 = r934794 / r934774;
double r934796 = r934784 + r934795;
double r934797 = r934788 + r934790;
double r934798 = r934781 * r934787;
double r934799 = r934798 / r934774;
double r934800 = r934797 + r934799;
double r934801 = r934796 / r934800;
double r934802 = r934780 ? r934793 : r934801;
return r934802;
}




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.4 |
|---|---|
| Target | 13.0 |
| Herbie | 12.8 |
if t < -6.886886549445264e+22 or 1.2179192080200545e-40 < t Initial program 11.1
Simplified4.3
rmApplied div-inv4.4
if -6.886886549445264e+22 < t < 1.2179192080200545e-40Initial program 22.2
Final simplification12.8
herbie shell --seed 2019351 +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))))