\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -5.1119206130188347 \cdot 10^{+148}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)} \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)\\
\mathbf{elif}\;t \le 5.296699501987463 \cdot 10^{+88}:\\
\;\;\;\;\frac{\frac{y \cdot z}{t} + x}{\frac{y \cdot b}{t} + \left(1.0 + a\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)} \cdot \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 r33057151 = x;
double r33057152 = y;
double r33057153 = z;
double r33057154 = r33057152 * r33057153;
double r33057155 = t;
double r33057156 = r33057154 / r33057155;
double r33057157 = r33057151 + r33057156;
double r33057158 = a;
double r33057159 = 1.0;
double r33057160 = r33057158 + r33057159;
double r33057161 = b;
double r33057162 = r33057152 * r33057161;
double r33057163 = r33057162 / r33057155;
double r33057164 = r33057160 + r33057163;
double r33057165 = r33057157 / r33057164;
return r33057165;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33057166 = t;
double r33057167 = -5.1119206130188347e+148;
bool r33057168 = r33057166 <= r33057167;
double r33057169 = 1.0;
double r33057170 = y;
double r33057171 = r33057170 / r33057166;
double r33057172 = b;
double r33057173 = 1.0;
double r33057174 = a;
double r33057175 = r33057173 + r33057174;
double r33057176 = fma(r33057171, r33057172, r33057175);
double r33057177 = r33057169 / r33057176;
double r33057178 = z;
double r33057179 = x;
double r33057180 = fma(r33057171, r33057178, r33057179);
double r33057181 = r33057177 * r33057180;
double r33057182 = 5.296699501987463e+88;
bool r33057183 = r33057166 <= r33057182;
double r33057184 = r33057170 * r33057178;
double r33057185 = r33057184 / r33057166;
double r33057186 = r33057185 + r33057179;
double r33057187 = r33057170 * r33057172;
double r33057188 = r33057187 / r33057166;
double r33057189 = r33057188 + r33057175;
double r33057190 = r33057186 / r33057189;
double r33057191 = r33057183 ? r33057190 : r33057181;
double r33057192 = r33057168 ? r33057181 : r33057191;
return r33057192;
}




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.9 |
|---|---|
| Target | 13.3 |
| Herbie | 13.5 |
if t < -5.1119206130188347e+148 or 5.296699501987463e+88 < t Initial program 12.6
Simplified1.9
rmApplied div-inv2.0
if -5.1119206130188347e+148 < t < 5.296699501987463e+88Initial program 18.9
Final simplification13.5
herbie shell --seed 2019165 +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.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))