\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -8.7367557214171316 \cdot 10^{-135} \lor \neg \left(t \le 1.1605883559318448 \cdot 10^{-119}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \left(y \cdot b\right) \cdot \frac{1}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r635963 = x;
double r635964 = y;
double r635965 = z;
double r635966 = r635964 * r635965;
double r635967 = t;
double r635968 = r635966 / r635967;
double r635969 = r635963 + r635968;
double r635970 = a;
double r635971 = 1.0;
double r635972 = r635970 + r635971;
double r635973 = b;
double r635974 = r635964 * r635973;
double r635975 = r635974 / r635967;
double r635976 = r635972 + r635975;
double r635977 = r635969 / r635976;
return r635977;
}
double f(double x, double y, double z, double t, double a, double b) {
double r635978 = t;
double r635979 = -8.736755721417132e-135;
bool r635980 = r635978 <= r635979;
double r635981 = 1.1605883559318448e-119;
bool r635982 = r635978 <= r635981;
double r635983 = !r635982;
bool r635984 = r635980 || r635983;
double r635985 = y;
double r635986 = r635985 / r635978;
double r635987 = z;
double r635988 = x;
double r635989 = fma(r635986, r635987, r635988);
double r635990 = b;
double r635991 = a;
double r635992 = 1.0;
double r635993 = r635991 + r635992;
double r635994 = fma(r635986, r635990, r635993);
double r635995 = r635989 / r635994;
double r635996 = r635985 * r635987;
double r635997 = r635996 / r635978;
double r635998 = r635988 + r635997;
double r635999 = r635985 * r635990;
double r636000 = 1.0;
double r636001 = r636000 / r635978;
double r636002 = r635999 * r636001;
double r636003 = r635993 + r636002;
double r636004 = r635998 / r636003;
double r636005 = r635984 ? r635995 : r636004;
return r636005;
}




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.5 |
|---|---|
| Target | 12.9 |
| Herbie | 12.8 |
if t < -8.736755721417132e-135 or 1.1605883559318448e-119 < t Initial program 12.3
rmApplied div-inv12.4
Simplified10.2
rmApplied associate-*r/10.2
Simplified7.1
if -8.736755721417132e-135 < t < 1.1605883559318448e-119Initial program 27.5
rmApplied div-inv27.5
Final simplification12.8
herbie shell --seed 2020033 +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))))