\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -8.926403496931373984388403495533588251457 \cdot 10^{-63} \lor \neg \left(t \le 2.888050261675248381667778999049849702192 \cdot 10^{-62}\right):\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(\sqrt[3]{\left(a + 1\right) + \frac{y \cdot b}{t}} \cdot \sqrt[3]{\left(a + 1\right) + \frac{y \cdot b}{t}}\right) \cdot \sqrt[3]{\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 r1096256 = x;
double r1096257 = y;
double r1096258 = z;
double r1096259 = r1096257 * r1096258;
double r1096260 = t;
double r1096261 = r1096259 / r1096260;
double r1096262 = r1096256 + r1096261;
double r1096263 = a;
double r1096264 = 1.0;
double r1096265 = r1096263 + r1096264;
double r1096266 = b;
double r1096267 = r1096257 * r1096266;
double r1096268 = r1096267 / r1096260;
double r1096269 = r1096265 + r1096268;
double r1096270 = r1096262 / r1096269;
return r1096270;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1096271 = t;
double r1096272 = -8.926403496931374e-63;
bool r1096273 = r1096271 <= r1096272;
double r1096274 = 2.8880502616752484e-62;
bool r1096275 = r1096271 <= r1096274;
double r1096276 = !r1096275;
bool r1096277 = r1096273 || r1096276;
double r1096278 = x;
double r1096279 = y;
double r1096280 = z;
double r1096281 = r1096271 / r1096280;
double r1096282 = r1096279 / r1096281;
double r1096283 = r1096278 + r1096282;
double r1096284 = a;
double r1096285 = 1.0;
double r1096286 = r1096284 + r1096285;
double r1096287 = b;
double r1096288 = r1096271 / r1096287;
double r1096289 = r1096279 / r1096288;
double r1096290 = r1096286 + r1096289;
double r1096291 = r1096283 / r1096290;
double r1096292 = r1096279 * r1096280;
double r1096293 = r1096292 / r1096271;
double r1096294 = r1096278 + r1096293;
double r1096295 = r1096279 * r1096287;
double r1096296 = r1096295 / r1096271;
double r1096297 = r1096286 + r1096296;
double r1096298 = cbrt(r1096297);
double r1096299 = r1096298 * r1096298;
double r1096300 = r1096299 * r1096298;
double r1096301 = r1096294 / r1096300;
double r1096302 = r1096277 ? r1096291 : r1096301;
return r1096302;
}




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.7 |
|---|---|
| Target | 13.4 |
| Herbie | 13.3 |
if t < -8.926403496931374e-63 or 2.8880502616752484e-62 < t Initial program 12.0
rmApplied associate-/l*9.2
rmApplied associate-/l*6.1
if -8.926403496931374e-63 < t < 2.8880502616752484e-62Initial program 24.4
rmApplied add-cube-cbrt24.8
Final simplification13.3
herbie shell --seed 2019209
(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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))