\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -5.04768639156161125 \cdot 10^{39}:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}{\frac{y}{\frac{t}{z}} + x}}\\
\mathbf{elif}\;t \le 1.66916686530934162 \cdot 10^{47}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r798373 = x;
double r798374 = y;
double r798375 = z;
double r798376 = r798374 * r798375;
double r798377 = t;
double r798378 = r798376 / r798377;
double r798379 = r798373 + r798378;
double r798380 = a;
double r798381 = 1.0;
double r798382 = r798380 + r798381;
double r798383 = b;
double r798384 = r798374 * r798383;
double r798385 = r798384 / r798377;
double r798386 = r798382 + r798385;
double r798387 = r798379 / r798386;
return r798387;
}
double f(double x, double y, double z, double t, double a, double b) {
double r798388 = t;
double r798389 = -5.047686391561611e+39;
bool r798390 = r798388 <= r798389;
double r798391 = 1.0;
double r798392 = y;
double r798393 = r798392 / r798388;
double r798394 = b;
double r798395 = a;
double r798396 = fma(r798393, r798394, r798395);
double r798397 = 1.0;
double r798398 = r798396 + r798397;
double r798399 = z;
double r798400 = r798388 / r798399;
double r798401 = r798392 / r798400;
double r798402 = x;
double r798403 = r798401 + r798402;
double r798404 = r798398 / r798403;
double r798405 = r798391 / r798404;
double r798406 = 1.6691668653093416e+47;
bool r798407 = r798388 <= r798406;
double r798408 = r798392 * r798399;
double r798409 = r798408 / r798388;
double r798410 = r798402 + r798409;
double r798411 = r798395 + r798397;
double r798412 = r798392 * r798394;
double r798413 = r798412 / r798388;
double r798414 = r798411 + r798413;
double r798415 = r798410 / r798414;
double r798416 = fma(r798393, r798399, r798402);
double r798417 = r798391 / r798398;
double r798418 = r798416 * r798417;
double r798419 = r798407 ? r798415 : r798418;
double r798420 = r798390 ? r798405 : r798419;
return r798420;
}




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.6 |
|---|---|
| Target | 13.1 |
| Herbie | 12.9 |
if t < -5.047686391561611e+39Initial program 12.4
Simplified3.6
rmApplied clear-num4.0
rmApplied fma-udef4.0
Simplified3.9
if -5.047686391561611e+39 < t < 1.6691668653093416e+47Initial program 20.6
if 1.6691668653093416e+47 < t Initial program 11.0
Simplified2.9
rmApplied div-inv3.0
Final simplification12.9
herbie shell --seed 2020042 +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))))