\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le 3.6240631720595186 \cdot 10^{+86}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1.0 + a\right) + \left(y \cdot b\right) \cdot \frac{1}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\frac{y \cdot b}{t} + \left(1.0 + a\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r33083423 = x;
double r33083424 = y;
double r33083425 = z;
double r33083426 = r33083424 * r33083425;
double r33083427 = t;
double r33083428 = r33083426 / r33083427;
double r33083429 = r33083423 + r33083428;
double r33083430 = a;
double r33083431 = 1.0;
double r33083432 = r33083430 + r33083431;
double r33083433 = b;
double r33083434 = r33083424 * r33083433;
double r33083435 = r33083434 / r33083427;
double r33083436 = r33083432 + r33083435;
double r33083437 = r33083429 / r33083436;
return r33083437;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33083438 = t;
double r33083439 = 3.6240631720595186e+86;
bool r33083440 = r33083438 <= r33083439;
double r33083441 = x;
double r33083442 = y;
double r33083443 = z;
double r33083444 = r33083442 * r33083443;
double r33083445 = r33083444 / r33083438;
double r33083446 = r33083441 + r33083445;
double r33083447 = 1.0;
double r33083448 = a;
double r33083449 = r33083447 + r33083448;
double r33083450 = b;
double r33083451 = r33083442 * r33083450;
double r33083452 = 1.0;
double r33083453 = r33083452 / r33083438;
double r33083454 = r33083451 * r33083453;
double r33083455 = r33083449 + r33083454;
double r33083456 = r33083446 / r33083455;
double r33083457 = r33083443 / r33083438;
double r33083458 = fma(r33083457, r33083442, r33083441);
double r33083459 = r33083451 / r33083438;
double r33083460 = r33083459 + r33083449;
double r33083461 = r33083458 / r33083460;
double r33083462 = r33083440 ? r33083456 : r33083461;
return r33083462;
}




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 | 15.8 |
if t < 3.6240631720595186e+86Initial program 17.5
rmApplied div-inv17.5
if 3.6240631720595186e+86 < t Initial program 12.1
Taylor expanded around 0 12.1
Simplified8.5
Final simplification15.8
herbie shell --seed 2019168 +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))))