\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -5.568602588790501459366233394376877186005 \cdot 10^{-5} \lor \neg \left(t \le 2.733083018279424726772211123917991343589 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, 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 r546762 = x;
double r546763 = y;
double r546764 = z;
double r546765 = r546763 * r546764;
double r546766 = t;
double r546767 = r546765 / r546766;
double r546768 = r546762 + r546767;
double r546769 = a;
double r546770 = 1.0;
double r546771 = r546769 + r546770;
double r546772 = b;
double r546773 = r546763 * r546772;
double r546774 = r546773 / r546766;
double r546775 = r546771 + r546774;
double r546776 = r546768 / r546775;
return r546776;
}
double f(double x, double y, double z, double t, double a, double b) {
double r546777 = t;
double r546778 = -5.5686025887905015e-05;
bool r546779 = r546777 <= r546778;
double r546780 = 2.7330830182794247e-77;
bool r546781 = r546777 <= r546780;
double r546782 = !r546781;
bool r546783 = r546779 || r546782;
double r546784 = y;
double r546785 = r546784 / r546777;
double r546786 = z;
double r546787 = x;
double r546788 = fma(r546785, r546786, r546787);
double r546789 = b;
double r546790 = a;
double r546791 = fma(r546785, r546789, r546790);
double r546792 = 1.0;
double r546793 = r546791 + r546792;
double r546794 = r546788 / r546793;
double r546795 = r546784 * r546786;
double r546796 = r546795 / r546777;
double r546797 = r546787 + r546796;
double r546798 = r546790 + r546792;
double r546799 = r546784 * r546789;
double r546800 = r546799 / r546777;
double r546801 = r546798 + r546800;
double r546802 = r546797 / r546801;
double r546803 = r546783 ? r546794 : r546802;
return r546803;
}




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.6 |
|---|---|
| Target | 13.5 |
| Herbie | 12.9 |
if t < -5.5686025887905015e-05 or 2.7330830182794247e-77 < t Initial program 12.1
Simplified5.6
if -5.5686025887905015e-05 < t < 2.7330830182794247e-77Initial program 22.8
Final simplification12.9
herbie shell --seed 2019303 +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))))