\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 r1136045 = x;
double r1136046 = y;
double r1136047 = z;
double r1136048 = r1136046 * r1136047;
double r1136049 = t;
double r1136050 = r1136048 / r1136049;
double r1136051 = r1136045 + r1136050;
double r1136052 = a;
double r1136053 = 1.0;
double r1136054 = r1136052 + r1136053;
double r1136055 = b;
double r1136056 = r1136046 * r1136055;
double r1136057 = r1136056 / r1136049;
double r1136058 = r1136054 + r1136057;
double r1136059 = r1136051 / r1136058;
return r1136059;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1136060 = t;
double r1136061 = -5.5686025887905015e-05;
bool r1136062 = r1136060 <= r1136061;
double r1136063 = 2.7330830182794247e-77;
bool r1136064 = r1136060 <= r1136063;
double r1136065 = !r1136064;
bool r1136066 = r1136062 || r1136065;
double r1136067 = y;
double r1136068 = r1136067 / r1136060;
double r1136069 = z;
double r1136070 = x;
double r1136071 = fma(r1136068, r1136069, r1136070);
double r1136072 = b;
double r1136073 = a;
double r1136074 = fma(r1136068, r1136072, r1136073);
double r1136075 = 1.0;
double r1136076 = r1136074 + r1136075;
double r1136077 = r1136071 / r1136076;
double r1136078 = r1136067 * r1136069;
double r1136079 = r1136078 / r1136060;
double r1136080 = r1136070 + r1136079;
double r1136081 = r1136073 + r1136075;
double r1136082 = r1136067 * r1136072;
double r1136083 = r1136082 / r1136060;
double r1136084 = r1136081 + r1136083;
double r1136085 = r1136080 / r1136084;
double r1136086 = r1136066 ? r1136077 : r1136085;
return r1136086;
}




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))))