\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;b \le -6.1627483557735157 \cdot 10^{-52} \lor \neg \left(b \le 1502069550.1706839\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\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 r730403 = x;
double r730404 = y;
double r730405 = z;
double r730406 = r730404 * r730405;
double r730407 = t;
double r730408 = r730406 / r730407;
double r730409 = r730403 + r730408;
double r730410 = a;
double r730411 = 1.0;
double r730412 = r730410 + r730411;
double r730413 = b;
double r730414 = r730404 * r730413;
double r730415 = r730414 / r730407;
double r730416 = r730412 + r730415;
double r730417 = r730409 / r730416;
return r730417;
}
double f(double x, double y, double z, double t, double a, double b) {
double r730418 = b;
double r730419 = -6.162748355773516e-52;
bool r730420 = r730418 <= r730419;
double r730421 = 1502069550.1706839;
bool r730422 = r730418 <= r730421;
double r730423 = !r730422;
bool r730424 = r730420 || r730423;
double r730425 = y;
double r730426 = t;
double r730427 = r730425 / r730426;
double r730428 = z;
double r730429 = x;
double r730430 = fma(r730427, r730428, r730429);
double r730431 = 1.0;
double r730432 = a;
double r730433 = 1.0;
double r730434 = r730432 + r730433;
double r730435 = fma(r730427, r730418, r730434);
double r730436 = r730431 / r730435;
double r730437 = r730430 * r730436;
double r730438 = r730426 / r730428;
double r730439 = r730425 / r730438;
double r730440 = r730429 + r730439;
double r730441 = r730425 * r730418;
double r730442 = r730441 / r730426;
double r730443 = r730434 + r730442;
double r730444 = r730440 / r730443;
double r730445 = r730424 ? r730437 : r730444;
return r730445;
}




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.7 |
|---|---|
| Target | 13.8 |
| Herbie | 14.9 |
if b < -6.162748355773516e-52 or 1502069550.1706839 < b Initial program 21.8
rmApplied div-inv21.9
Simplified19.0
rmApplied *-un-lft-identity19.0
Applied *-un-lft-identity19.0
Applied times-frac19.0
Applied associate-*r*19.0
Simplified18.5
if -6.162748355773516e-52 < b < 1502069550.1706839Initial program 10.7
rmApplied associate-/l*10.6
Final simplification14.9
herbie shell --seed 2020035 +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))))