\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;z \le -1.6665856283572759 \cdot 10^{-183}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)}\\
\mathbf{elif}\;z \le 2.227585327806652 \cdot 10^{-193}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\frac{b \cdot y}{t} + \left(1.0 + a\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r31735089 = x;
double r31735090 = y;
double r31735091 = z;
double r31735092 = r31735090 * r31735091;
double r31735093 = t;
double r31735094 = r31735092 / r31735093;
double r31735095 = r31735089 + r31735094;
double r31735096 = a;
double r31735097 = 1.0;
double r31735098 = r31735096 + r31735097;
double r31735099 = b;
double r31735100 = r31735090 * r31735099;
double r31735101 = r31735100 / r31735093;
double r31735102 = r31735098 + r31735101;
double r31735103 = r31735095 / r31735102;
return r31735103;
}
double f(double x, double y, double z, double t, double a, double b) {
double r31735104 = z;
double r31735105 = -1.6665856283572759e-183;
bool r31735106 = r31735104 <= r31735105;
double r31735107 = y;
double r31735108 = t;
double r31735109 = r31735107 / r31735108;
double r31735110 = x;
double r31735111 = fma(r31735109, r31735104, r31735110);
double r31735112 = b;
double r31735113 = 1.0;
double r31735114 = a;
double r31735115 = r31735113 + r31735114;
double r31735116 = fma(r31735109, r31735112, r31735115);
double r31735117 = r31735111 / r31735116;
double r31735118 = 2.227585327806652e-193;
bool r31735119 = r31735104 <= r31735118;
double r31735120 = r31735107 * r31735104;
double r31735121 = r31735120 / r31735108;
double r31735122 = r31735110 + r31735121;
double r31735123 = r31735112 * r31735107;
double r31735124 = r31735123 / r31735108;
double r31735125 = r31735124 + r31735115;
double r31735126 = r31735122 / r31735125;
double r31735127 = r31735119 ? r31735126 : r31735117;
double r31735128 = r31735106 ? r31735117 : r31735127;
return r31735128;
}




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 | 13.1 |
| Herbie | 13.5 |
if z < -1.6665856283572759e-183 or 2.227585327806652e-193 < z Initial program 19.0
Simplified15.3
if -1.6665856283572759e-183 < z < 2.227585327806652e-193Initial program 6.0
Final simplification13.5
herbie shell --seed 2019162 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))