\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -2.0364539309351452 \cdot 10^{-27} \lor \neg \left(t \le 2.0111491653402853 \cdot 10^{93}\right):\\
\;\;\;\;\left(x + y \cdot \frac{z}{t}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r974519 = x;
double r974520 = y;
double r974521 = z;
double r974522 = r974520 * r974521;
double r974523 = t;
double r974524 = r974522 / r974523;
double r974525 = r974519 + r974524;
double r974526 = a;
double r974527 = 1.0;
double r974528 = r974526 + r974527;
double r974529 = b;
double r974530 = r974520 * r974529;
double r974531 = r974530 / r974523;
double r974532 = r974528 + r974531;
double r974533 = r974525 / r974532;
return r974533;
}
double f(double x, double y, double z, double t, double a, double b) {
double r974534 = t;
double r974535 = -2.036453930935145e-27;
bool r974536 = r974534 <= r974535;
double r974537 = 2.0111491653402853e+93;
bool r974538 = r974534 <= r974537;
double r974539 = !r974538;
bool r974540 = r974536 || r974539;
double r974541 = x;
double r974542 = y;
double r974543 = z;
double r974544 = r974543 / r974534;
double r974545 = r974542 * r974544;
double r974546 = r974541 + r974545;
double r974547 = 1.0;
double r974548 = r974542 / r974534;
double r974549 = b;
double r974550 = a;
double r974551 = 1.0;
double r974552 = r974550 + r974551;
double r974553 = fma(r974548, r974549, r974552);
double r974554 = r974547 / r974553;
double r974555 = r974546 * r974554;
double r974556 = r974542 * r974543;
double r974557 = r974534 / r974556;
double r974558 = r974547 / r974557;
double r974559 = r974541 + r974558;
double r974560 = r974542 * r974549;
double r974561 = r974560 / r974534;
double r974562 = r974552 + r974561;
double r974563 = r974559 / r974562;
double r974564 = r974540 ? r974555 : r974563;
return r974564;
}




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.4 |
| Herbie | 12.9 |
if t < -2.036453930935145e-27 or 2.0111491653402853e+93 < t Initial program 11.5
rmApplied div-inv11.6
Simplified8.3
rmApplied *-un-lft-identity8.3
Applied times-frac3.5
Simplified3.5
if -2.036453930935145e-27 < t < 2.0111491653402853e+93Initial program 20.9
rmApplied clear-num20.9
Final simplification12.9
herbie shell --seed 2020025 +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))))