\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -1.70915755118184234 \cdot 10^{32} \lor \neg \left(y \le 6.6772675351438104 \cdot 10^{75} \lor \neg \left(y \le 4.2862283636253177 \cdot 10^{272}\right)\right):\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r757689 = x;
double r757690 = y;
double r757691 = z;
double r757692 = r757690 * r757691;
double r757693 = t;
double r757694 = r757692 / r757693;
double r757695 = r757689 + r757694;
double r757696 = a;
double r757697 = 1.0;
double r757698 = r757696 + r757697;
double r757699 = b;
double r757700 = r757690 * r757699;
double r757701 = r757700 / r757693;
double r757702 = r757698 + r757701;
double r757703 = r757695 / r757702;
return r757703;
}
double f(double x, double y, double z, double t, double a, double b) {
double r757704 = y;
double r757705 = -1.7091575511818423e+32;
bool r757706 = r757704 <= r757705;
double r757707 = 6.67726753514381e+75;
bool r757708 = r757704 <= r757707;
double r757709 = 4.286228363625318e+272;
bool r757710 = r757704 <= r757709;
double r757711 = !r757710;
bool r757712 = r757708 || r757711;
double r757713 = !r757712;
bool r757714 = r757706 || r757713;
double r757715 = x;
double r757716 = z;
double r757717 = t;
double r757718 = r757716 / r757717;
double r757719 = r757704 * r757718;
double r757720 = r757715 + r757719;
double r757721 = a;
double r757722 = 1.0;
double r757723 = r757721 + r757722;
double r757724 = b;
double r757725 = r757717 / r757724;
double r757726 = r757704 / r757725;
double r757727 = r757723 + r757726;
double r757728 = r757720 / r757727;
double r757729 = 1.0;
double r757730 = r757704 / r757717;
double r757731 = fma(r757730, r757724, r757723);
double r757732 = fma(r757730, r757716, r757715);
double r757733 = r757731 / r757732;
double r757734 = r757729 / r757733;
double r757735 = r757714 ? r757728 : r757734;
return r757735;
}




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.8 |
|---|---|
| Target | 13.6 |
| Herbie | 13.2 |
if y < -1.7091575511818423e+32 or 6.67726753514381e+75 < y < 4.286228363625318e+272Initial program 32.0
rmApplied associate-/l*28.7
rmApplied *-un-lft-identity28.7
Applied times-frac23.0
Simplified23.0
if -1.7091575511818423e+32 < y < 6.67726753514381e+75 or 4.286228363625318e+272 < y Initial program 7.5
rmApplied associate-/l*10.1
rmApplied *-un-lft-identity10.1
Applied *-un-lft-identity10.1
Applied times-frac10.1
Simplified10.1
Simplified7.3
rmApplied clear-num7.6
Simplified7.2
Final simplification13.2
herbie shell --seed 2020060 +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))))