\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -3.309535570402011 \cdot 10^{-68}:\\
\;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\
\mathbf{elif}\;y \le 1.8936363334597205 \cdot 10^{-182}:\\
\;\;\;\;\frac{z \cdot \frac{y}{t} + x}{\left(1.0 + a\right) + \frac{b \cdot y}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r40718776 = x;
double r40718777 = y;
double r40718778 = z;
double r40718779 = r40718777 * r40718778;
double r40718780 = t;
double r40718781 = r40718779 / r40718780;
double r40718782 = r40718776 + r40718781;
double r40718783 = a;
double r40718784 = 1.0;
double r40718785 = r40718783 + r40718784;
double r40718786 = b;
double r40718787 = r40718777 * r40718786;
double r40718788 = r40718787 / r40718780;
double r40718789 = r40718785 + r40718788;
double r40718790 = r40718782 / r40718789;
return r40718790;
}
double f(double x, double y, double z, double t, double a, double b) {
double r40718791 = y;
double r40718792 = -3.309535570402011e-68;
bool r40718793 = r40718791 <= r40718792;
double r40718794 = x;
double r40718795 = z;
double r40718796 = t;
double r40718797 = r40718795 / r40718796;
double r40718798 = r40718797 * r40718791;
double r40718799 = r40718794 + r40718798;
double r40718800 = 1.0;
double r40718801 = a;
double r40718802 = r40718800 + r40718801;
double r40718803 = b;
double r40718804 = r40718803 / r40718796;
double r40718805 = r40718804 * r40718791;
double r40718806 = r40718802 + r40718805;
double r40718807 = r40718799 / r40718806;
double r40718808 = 1.8936363334597205e-182;
bool r40718809 = r40718791 <= r40718808;
double r40718810 = r40718791 / r40718796;
double r40718811 = r40718795 * r40718810;
double r40718812 = r40718811 + r40718794;
double r40718813 = r40718803 * r40718791;
double r40718814 = r40718813 / r40718796;
double r40718815 = r40718802 + r40718814;
double r40718816 = r40718812 / r40718815;
double r40718817 = r40718809 ? r40718816 : r40718807;
double r40718818 = r40718793 ? r40718807 : r40718817;
return r40718818;
}




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.0 |
|---|---|
| Target | 13.2 |
| Herbie | 13.1 |
if y < -3.309535570402011e-68 or 1.8936363334597205e-182 < y Initial program 21.9
rmApplied *-un-lft-identity21.9
Applied associate-/r*21.9
Simplified20.1
rmApplied *-un-lft-identity20.1
Applied times-frac17.7
Simplified17.7
rmApplied div-inv17.8
Simplified17.7
if -3.309535570402011e-68 < y < 1.8936363334597205e-182Initial program 2.4
rmApplied *-un-lft-identity2.4
Applied associate-/r*2.4
Simplified7.8
rmApplied associate-/r/2.5
Final simplification13.1
herbie shell --seed 2019163
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))