\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -1.2730664839585871 \cdot 10^{-178}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{1 + \mathsf{fma}\left(\frac{y}{t}, b, a\right)}\\
\mathbf{elif}\;t \le 8.29955366965115091 \cdot 10^{-51}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{1 + \mathsf{fma}\left(\frac{y}{t}, b, a\right)}{\frac{z}{t} \cdot y + x}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r894266 = x;
double r894267 = y;
double r894268 = z;
double r894269 = r894267 * r894268;
double r894270 = t;
double r894271 = r894269 / r894270;
double r894272 = r894266 + r894271;
double r894273 = a;
double r894274 = 1.0;
double r894275 = r894273 + r894274;
double r894276 = b;
double r894277 = r894267 * r894276;
double r894278 = r894277 / r894270;
double r894279 = r894275 + r894278;
double r894280 = r894272 / r894279;
return r894280;
}
double f(double x, double y, double z, double t, double a, double b) {
double r894281 = t;
double r894282 = -1.273066483958587e-178;
bool r894283 = r894281 <= r894282;
double r894284 = y;
double r894285 = r894284 / r894281;
double r894286 = z;
double r894287 = x;
double r894288 = fma(r894285, r894286, r894287);
double r894289 = 1.0;
double r894290 = 1.0;
double r894291 = b;
double r894292 = a;
double r894293 = fma(r894285, r894291, r894292);
double r894294 = r894290 + r894293;
double r894295 = r894289 / r894294;
double r894296 = r894288 * r894295;
double r894297 = 8.299553669651151e-51;
bool r894298 = r894281 <= r894297;
double r894299 = r894284 * r894286;
double r894300 = r894299 / r894281;
double r894301 = r894287 + r894300;
double r894302 = r894292 + r894290;
double r894303 = r894284 * r894291;
double r894304 = r894303 / r894281;
double r894305 = r894302 + r894304;
double r894306 = r894301 / r894305;
double r894307 = r894286 / r894281;
double r894308 = r894307 * r894284;
double r894309 = r894308 + r894287;
double r894310 = r894294 / r894309;
double r894311 = r894289 / r894310;
double r894312 = r894298 ? r894306 : r894311;
double r894313 = r894283 ? r894296 : r894312;
return r894313;
}




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.2 |
|---|---|
| Target | 13.2 |
| Herbie | 13.2 |
if t < -1.273066483958587e-178Initial program 12.3
Simplified9.1
rmApplied div-inv9.2
if -1.273066483958587e-178 < t < 8.299553669651151e-51Initial program 25.9
if 8.299553669651151e-51 < t Initial program 11.8
Simplified5.1
rmApplied clear-num5.5
rmApplied fma-udef5.5
Simplified5.6
Final simplification13.2
herbie shell --seed 2020045 +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))))