\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -11426198898.5786876678466796875:\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{elif}\;y \le 6.399239486311505375772837011137183856531 \cdot 10^{-56}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{\frac{y}{t}}{\frac{1}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\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 r479465 = x;
double r479466 = y;
double r479467 = z;
double r479468 = r479466 * r479467;
double r479469 = t;
double r479470 = r479468 / r479469;
double r479471 = r479465 + r479470;
double r479472 = a;
double r479473 = 1.0;
double r479474 = r479472 + r479473;
double r479475 = b;
double r479476 = r479466 * r479475;
double r479477 = r479476 / r479469;
double r479478 = r479474 + r479477;
double r479479 = r479471 / r479478;
return r479479;
}
double f(double x, double y, double z, double t, double a, double b) {
double r479480 = y;
double r479481 = -11426198898.578688;
bool r479482 = r479480 <= r479481;
double r479483 = x;
double r479484 = z;
double r479485 = t;
double r479486 = r479484 / r479485;
double r479487 = r479480 * r479486;
double r479488 = r479483 + r479487;
double r479489 = a;
double r479490 = 1.0;
double r479491 = r479489 + r479490;
double r479492 = b;
double r479493 = r479492 / r479485;
double r479494 = r479480 * r479493;
double r479495 = r479491 + r479494;
double r479496 = r479488 / r479495;
double r479497 = 6.399239486311505e-56;
bool r479498 = r479480 <= r479497;
double r479499 = r479480 * r479484;
double r479500 = r479499 / r479485;
double r479501 = r479483 + r479500;
double r479502 = r479480 / r479485;
double r479503 = 1.0;
double r479504 = r479503 / r479492;
double r479505 = r479502 / r479504;
double r479506 = r479491 + r479505;
double r479507 = r479501 / r479506;
double r479508 = r479485 / r479484;
double r479509 = r479480 / r479508;
double r479510 = r479483 + r479509;
double r479511 = r479485 / r479492;
double r479512 = r479480 / r479511;
double r479513 = r479491 + r479512;
double r479514 = r479510 / r479513;
double r479515 = r479498 ? r479507 : r479514;
double r479516 = r479482 ? r479496 : r479515;
return r479516;
}




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.5 |
|---|---|
| Target | 13.5 |
| Herbie | 12.8 |
if y < -11426198898.578688Initial program 30.6
rmApplied associate-/l*27.9
rmApplied *-un-lft-identity27.9
Applied times-frac23.2
Simplified23.2
rmApplied div-inv23.2
Simplified23.2
if -11426198898.578688 < y < 6.399239486311505e-56Initial program 3.7
rmApplied associate-/l*8.0
rmApplied div-inv8.0
Applied associate-/r*3.7
if 6.399239486311505e-56 < y Initial program 26.3
rmApplied associate-/l*23.5
rmApplied associate-/l*19.5
Final simplification12.8
herbie shell --seed 2019323
(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))))