\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -7.124834457221984082927906141414149452623 \cdot 10^{-28} \lor \neg \left(y \le 4.435895604434966039333651561130958554099 \cdot 10^{91}\right):\\
\;\;\;\;\frac{1}{\frac{\left(a + 1\right) + y \cdot \frac{b}{t}}{x + \frac{y}{\frac{t}{z}}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{1}{\frac{t}{y \cdot b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r510007 = x;
double r510008 = y;
double r510009 = z;
double r510010 = r510008 * r510009;
double r510011 = t;
double r510012 = r510010 / r510011;
double r510013 = r510007 + r510012;
double r510014 = a;
double r510015 = 1.0;
double r510016 = r510014 + r510015;
double r510017 = b;
double r510018 = r510008 * r510017;
double r510019 = r510018 / r510011;
double r510020 = r510016 + r510019;
double r510021 = r510013 / r510020;
return r510021;
}
double f(double x, double y, double z, double t, double a, double b) {
double r510022 = y;
double r510023 = -7.124834457221984e-28;
bool r510024 = r510022 <= r510023;
double r510025 = 4.435895604434966e+91;
bool r510026 = r510022 <= r510025;
double r510027 = !r510026;
bool r510028 = r510024 || r510027;
double r510029 = 1.0;
double r510030 = a;
double r510031 = 1.0;
double r510032 = r510030 + r510031;
double r510033 = b;
double r510034 = t;
double r510035 = r510033 / r510034;
double r510036 = r510022 * r510035;
double r510037 = r510032 + r510036;
double r510038 = x;
double r510039 = z;
double r510040 = r510034 / r510039;
double r510041 = r510022 / r510040;
double r510042 = r510038 + r510041;
double r510043 = r510037 / r510042;
double r510044 = r510029 / r510043;
double r510045 = r510022 * r510039;
double r510046 = r510045 / r510034;
double r510047 = r510038 + r510046;
double r510048 = r510022 * r510033;
double r510049 = r510034 / r510048;
double r510050 = r510029 / r510049;
double r510051 = r510032 + r510050;
double r510052 = r510047 / r510051;
double r510053 = r510028 ? r510044 : r510052;
return r510053;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 16.9 |
|---|---|
| Target | 13.1 |
| Herbie | 13.4 |
if y < -7.124834457221984e-28 or 4.435895604434966e+91 < y Initial program 31.6
rmApplied *-un-lft-identity31.6
Applied times-frac28.7
Simplified28.7
rmApplied associate-/l*23.5
rmApplied clear-num23.7
if -7.124834457221984e-28 < y < 4.435895604434966e+91Initial program 5.2
rmApplied clear-num5.2
Final simplification13.4
herbie shell --seed 2019325
(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))))