\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -6.084229636969371216885683145647115259784 \cdot 10^{78}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\mathsf{fma}\left(b, \frac{y}{t}, a\right) + 1}\\
\mathbf{elif}\;t \le 1092165316512745.5:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\frac{b \cdot y}{t} + \left(1 + a\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\mathsf{fma}\left(b, \frac{y}{t}, a\right) + 1}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r33475202 = x;
double r33475203 = y;
double r33475204 = z;
double r33475205 = r33475203 * r33475204;
double r33475206 = t;
double r33475207 = r33475205 / r33475206;
double r33475208 = r33475202 + r33475207;
double r33475209 = a;
double r33475210 = 1.0;
double r33475211 = r33475209 + r33475210;
double r33475212 = b;
double r33475213 = r33475203 * r33475212;
double r33475214 = r33475213 / r33475206;
double r33475215 = r33475211 + r33475214;
double r33475216 = r33475208 / r33475215;
return r33475216;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33475217 = t;
double r33475218 = -6.084229636969371e+78;
bool r33475219 = r33475217 <= r33475218;
double r33475220 = y;
double r33475221 = r33475220 / r33475217;
double r33475222 = z;
double r33475223 = x;
double r33475224 = fma(r33475221, r33475222, r33475223);
double r33475225 = 1.0;
double r33475226 = b;
double r33475227 = a;
double r33475228 = fma(r33475226, r33475221, r33475227);
double r33475229 = 1.0;
double r33475230 = r33475228 + r33475229;
double r33475231 = r33475225 / r33475230;
double r33475232 = r33475224 * r33475231;
double r33475233 = 1092165316512745.5;
bool r33475234 = r33475217 <= r33475233;
double r33475235 = r33475220 * r33475222;
double r33475236 = r33475235 / r33475217;
double r33475237 = r33475223 + r33475236;
double r33475238 = r33475226 * r33475220;
double r33475239 = r33475238 / r33475217;
double r33475240 = r33475229 + r33475227;
double r33475241 = r33475239 + r33475240;
double r33475242 = r33475237 / r33475241;
double r33475243 = r33475234 ? r33475242 : r33475232;
double r33475244 = r33475219 ? r33475232 : r33475243;
return r33475244;
}




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.4 |
| Herbie | 13.1 |
if t < -6.084229636969371e+78 or 1092165316512745.5 < t Initial program 11.3
Simplified3.4
rmApplied div-inv3.5
if -6.084229636969371e+78 < t < 1092165316512745.5Initial program 20.5
Final simplification13.1
herbie shell --seed 2019200 +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))))