\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -6.250985929191756168944543810127106716888 \cdot 10^{-15}:\\
\;\;\;\;\frac{x + \frac{y}{t} \cdot z}{\mathsf{fma}\left(\frac{y}{t}, b, 1 + a\right)}\\
\mathbf{elif}\;t \le 9.963354697681221136350955033362107430929 \cdot 10^{-228}:\\
\;\;\;\;\frac{\frac{y \cdot z}{t} + x}{\frac{y \cdot b}{t} + \left(1 + a\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t} \cdot z}{\mathsf{fma}\left(\frac{y}{t}, b, 1 + a\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r33666056 = x;
double r33666057 = y;
double r33666058 = z;
double r33666059 = r33666057 * r33666058;
double r33666060 = t;
double r33666061 = r33666059 / r33666060;
double r33666062 = r33666056 + r33666061;
double r33666063 = a;
double r33666064 = 1.0;
double r33666065 = r33666063 + r33666064;
double r33666066 = b;
double r33666067 = r33666057 * r33666066;
double r33666068 = r33666067 / r33666060;
double r33666069 = r33666065 + r33666068;
double r33666070 = r33666062 / r33666069;
return r33666070;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33666071 = t;
double r33666072 = -6.250985929191756e-15;
bool r33666073 = r33666071 <= r33666072;
double r33666074 = x;
double r33666075 = y;
double r33666076 = r33666075 / r33666071;
double r33666077 = z;
double r33666078 = r33666076 * r33666077;
double r33666079 = r33666074 + r33666078;
double r33666080 = b;
double r33666081 = 1.0;
double r33666082 = a;
double r33666083 = r33666081 + r33666082;
double r33666084 = fma(r33666076, r33666080, r33666083);
double r33666085 = r33666079 / r33666084;
double r33666086 = 9.963354697681221e-228;
bool r33666087 = r33666071 <= r33666086;
double r33666088 = r33666075 * r33666077;
double r33666089 = r33666088 / r33666071;
double r33666090 = r33666089 + r33666074;
double r33666091 = r33666075 * r33666080;
double r33666092 = r33666091 / r33666071;
double r33666093 = r33666092 + r33666083;
double r33666094 = r33666090 / r33666093;
double r33666095 = r33666087 ? r33666094 : r33666085;
double r33666096 = r33666073 ? r33666085 : r33666095;
return r33666096;
}




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.3 |
|---|---|
| Target | 13.0 |
| Herbie | 12.8 |
if t < -6.250985929191756e-15 or 9.963354697681221e-228 < t Initial program 13.4
Simplified8.5
rmApplied fma-udef8.5
if -6.250985929191756e-15 < t < 9.963354697681221e-228Initial program 23.5
Final simplification12.8
herbie shell --seed 2019170 +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))))