\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -4.704199613199595150215299647249448877711 \cdot 10^{111} \lor \neg \left(t \le 1.762388146479538961600229227290375791756 \cdot 10^{-51}\right):\\
\;\;\;\;\frac{1}{\frac{1}{\frac{\mathsf{fma}\left(\frac{z}{t}, y, 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 r555356 = x;
double r555357 = y;
double r555358 = z;
double r555359 = r555357 * r555358;
double r555360 = t;
double r555361 = r555359 / r555360;
double r555362 = r555356 + r555361;
double r555363 = a;
double r555364 = 1.0;
double r555365 = r555363 + r555364;
double r555366 = b;
double r555367 = r555357 * r555366;
double r555368 = r555367 / r555360;
double r555369 = r555365 + r555368;
double r555370 = r555362 / r555369;
return r555370;
}
double f(double x, double y, double z, double t, double a, double b) {
double r555371 = t;
double r555372 = -4.704199613199595e+111;
bool r555373 = r555371 <= r555372;
double r555374 = 1.762388146479539e-51;
bool r555375 = r555371 <= r555374;
double r555376 = !r555375;
bool r555377 = r555373 || r555376;
double r555378 = 1.0;
double r555379 = z;
double r555380 = r555379 / r555371;
double r555381 = y;
double r555382 = x;
double r555383 = fma(r555380, r555381, r555382);
double r555384 = r555381 / r555371;
double r555385 = b;
double r555386 = a;
double r555387 = fma(r555384, r555385, r555386);
double r555388 = 1.0;
double r555389 = r555387 + r555388;
double r555390 = r555383 / r555389;
double r555391 = r555378 / r555390;
double r555392 = r555378 / r555391;
double r555393 = r555381 * r555379;
double r555394 = r555393 / r555371;
double r555395 = r555382 + r555394;
double r555396 = r555386 + r555388;
double r555397 = r555381 * r555385;
double r555398 = r555397 / r555371;
double r555399 = r555396 + r555398;
double r555400 = r555395 / r555399;
double r555401 = r555377 ? r555392 : r555400;
return r555401;
}




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.2 |
| Herbie | 13.4 |
if t < -4.704199613199595e+111 or 1.762388146479539e-51 < t Initial program 11.3
Simplified4.0
rmApplied clear-num4.3
rmApplied clear-num4.3
Simplified4.4
if -4.704199613199595e+111 < t < 1.762388146479539e-51Initial program 21.0
Final simplification13.4
herbie shell --seed 2019208 +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))))