\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -235428762344843979143671561841079746560 \lor \neg \left(t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r511824 = x;
double r511825 = y;
double r511826 = z;
double r511827 = r511825 * r511826;
double r511828 = t;
double r511829 = r511827 / r511828;
double r511830 = r511824 + r511829;
double r511831 = a;
double r511832 = 1.0;
double r511833 = r511831 + r511832;
double r511834 = b;
double r511835 = r511825 * r511834;
double r511836 = r511835 / r511828;
double r511837 = r511833 + r511836;
double r511838 = r511830 / r511837;
return r511838;
}
double f(double x, double y, double z, double t, double a, double b) {
double r511839 = t;
double r511840 = -2.3542876234484398e+38;
bool r511841 = r511839 <= r511840;
double r511842 = 6.269129896688427e-59;
bool r511843 = r511839 <= r511842;
double r511844 = !r511843;
bool r511845 = r511841 || r511844;
double r511846 = x;
double r511847 = z;
double r511848 = y;
double r511849 = r511848 / r511839;
double r511850 = r511847 * r511849;
double r511851 = r511846 + r511850;
double r511852 = 1.0;
double r511853 = a;
double r511854 = r511852 + r511853;
double r511855 = b;
double r511856 = r511855 * r511849;
double r511857 = r511854 + r511856;
double r511858 = r511851 / r511857;
double r511859 = r511847 * r511848;
double r511860 = r511859 / r511839;
double r511861 = r511846 + r511860;
double r511862 = r511848 * r511855;
double r511863 = r511862 / r511839;
double r511864 = r511854 + r511863;
double r511865 = r511861 / r511864;
double r511866 = r511845 ? r511858 : r511865;
return r511866;
}




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.2 |
| Herbie | 13.1 |
if t < -2.3542876234484398e+38 or 6.269129896688427e-59 < t Initial program 11.6
Simplified4.5
rmApplied fma-udef4.5
rmApplied div-inv4.6
Applied associate-*l*4.6
Simplified4.6
rmApplied fma-udef4.6
Simplified4.5
if -2.3542876234484398e+38 < t < 6.269129896688427e-59Initial program 22.8
Final simplification13.1
herbie shell --seed 2019174 +o rules:numerics
(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.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))