\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -3.123662335419235249800964328649883105942 \cdot 10^{-84}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{elif}\;t \le 9.942136300078201775973998503198271123327 \cdot 10^{-11}:\\
\;\;\;\;\frac{1}{\frac{\left(a + 1\right) + \frac{y \cdot b}{t}}{x + \frac{y \cdot z}{t}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{z}{\sqrt[3]{t}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r522393 = x;
double r522394 = y;
double r522395 = z;
double r522396 = r522394 * r522395;
double r522397 = t;
double r522398 = r522396 / r522397;
double r522399 = r522393 + r522398;
double r522400 = a;
double r522401 = 1.0;
double r522402 = r522400 + r522401;
double r522403 = b;
double r522404 = r522394 * r522403;
double r522405 = r522404 / r522397;
double r522406 = r522402 + r522405;
double r522407 = r522399 / r522406;
return r522407;
}
double f(double x, double y, double z, double t, double a, double b) {
double r522408 = t;
double r522409 = -3.1236623354192352e-84;
bool r522410 = r522408 <= r522409;
double r522411 = x;
double r522412 = y;
double r522413 = z;
double r522414 = r522408 / r522413;
double r522415 = r522412 / r522414;
double r522416 = r522411 + r522415;
double r522417 = a;
double r522418 = 1.0;
double r522419 = r522417 + r522418;
double r522420 = b;
double r522421 = r522412 * r522420;
double r522422 = r522421 / r522408;
double r522423 = r522419 + r522422;
double r522424 = r522416 / r522423;
double r522425 = 9.942136300078202e-11;
bool r522426 = r522408 <= r522425;
double r522427 = 1.0;
double r522428 = r522412 * r522413;
double r522429 = r522428 / r522408;
double r522430 = r522411 + r522429;
double r522431 = r522423 / r522430;
double r522432 = r522427 / r522431;
double r522433 = cbrt(r522408);
double r522434 = r522433 * r522433;
double r522435 = r522412 / r522434;
double r522436 = r522413 / r522433;
double r522437 = r522435 * r522436;
double r522438 = r522411 + r522437;
double r522439 = r522408 / r522420;
double r522440 = r522412 / r522439;
double r522441 = r522419 + r522440;
double r522442 = r522438 / r522441;
double r522443 = r522426 ? r522432 : r522442;
double r522444 = r522410 ? r522424 : r522443;
return r522444;
}




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.0 |
| Herbie | 14.0 |
if t < -3.1236623354192352e-84Initial program 11.1
rmApplied associate-/l*8.9
if -3.1236623354192352e-84 < t < 9.942136300078202e-11Initial program 24.5
rmApplied clear-num24.7
if 9.942136300078202e-11 < t Initial program 11.5
rmApplied add-cube-cbrt11.6
Applied times-frac8.4
rmApplied associate-/l*4.0
Final simplification14.0
herbie shell --seed 2019306
(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))))