\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1\right)} \le -2.920289298659490288425480516012074489493 \cdot 10^{-301} \lor \neg \left(\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1\right)} \le 2.4163364434325818481245117375278618817 \cdot 10^{-239}\right):\\
\;\;\;\;\frac{x + \frac{z}{\frac{t}{y}}}{1 + \left(b \cdot \frac{y}{t} + a\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(x + y \cdot \frac{z}{t}\right) \cdot \frac{1}{a + \left(1 + b \cdot \frac{y}{t}\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r686455 = x;
double r686456 = y;
double r686457 = z;
double r686458 = r686456 * r686457;
double r686459 = t;
double r686460 = r686458 / r686459;
double r686461 = r686455 + r686460;
double r686462 = a;
double r686463 = 1.0;
double r686464 = r686462 + r686463;
double r686465 = b;
double r686466 = r686456 * r686465;
double r686467 = r686466 / r686459;
double r686468 = r686464 + r686467;
double r686469 = r686461 / r686468;
return r686469;
}
double f(double x, double y, double z, double t, double a, double b) {
double r686470 = z;
double r686471 = y;
double r686472 = r686470 * r686471;
double r686473 = t;
double r686474 = r686472 / r686473;
double r686475 = x;
double r686476 = r686474 + r686475;
double r686477 = b;
double r686478 = r686477 * r686471;
double r686479 = r686478 / r686473;
double r686480 = a;
double r686481 = 1.0;
double r686482 = r686480 + r686481;
double r686483 = r686479 + r686482;
double r686484 = r686476 / r686483;
double r686485 = -2.9202892986594903e-301;
bool r686486 = r686484 <= r686485;
double r686487 = 2.416336443432582e-239;
bool r686488 = r686484 <= r686487;
double r686489 = !r686488;
bool r686490 = r686486 || r686489;
double r686491 = r686473 / r686471;
double r686492 = r686470 / r686491;
double r686493 = r686475 + r686492;
double r686494 = r686471 / r686473;
double r686495 = r686477 * r686494;
double r686496 = r686495 + r686480;
double r686497 = r686481 + r686496;
double r686498 = r686493 / r686497;
double r686499 = r686470 / r686473;
double r686500 = r686471 * r686499;
double r686501 = r686475 + r686500;
double r686502 = 1.0;
double r686503 = r686481 + r686495;
double r686504 = r686480 + r686503;
double r686505 = r686502 / r686504;
double r686506 = r686501 * r686505;
double r686507 = r686490 ? r686498 : r686506;
return r686507;
}




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 | 17.2 |
|---|---|
| Target | 13.7 |
| Herbie | 14.4 |
if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -2.9202892986594903e-301 or 2.416336443432582e-239 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) Initial program 15.3
Simplified13.5
rmApplied div-inv13.6
Simplified13.6
rmApplied *-un-lft-identity13.6
Applied associate-*l*13.6
Simplified13.6
if -2.9202892986594903e-301 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 2.416336443432582e-239Initial program 24.9
Simplified21.2
rmApplied div-inv21.2
Simplified21.2
rmApplied div-inv21.2
Applied associate-*l*17.5
Simplified17.5
Final simplification14.4
herbie shell --seed 2019179
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))