\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -4.147142268992736217334744595000847977693 \cdot 10^{-47}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(1 + a\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{elif}\;t \le 1.159687065919828568064040293359474030002 \cdot 10^{-206}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{y \cdot z}{t} + x} \cdot \sqrt[3]{\frac{y \cdot z}{t} + x}}{\frac{\left(1 + a\right) + \frac{y \cdot b}{t}}{\sqrt[3]{\frac{y \cdot z}{t} + x}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(1 + a\right) + \frac{y}{\frac{t}{b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r36706385 = x;
double r36706386 = y;
double r36706387 = z;
double r36706388 = r36706386 * r36706387;
double r36706389 = t;
double r36706390 = r36706388 / r36706389;
double r36706391 = r36706385 + r36706390;
double r36706392 = a;
double r36706393 = 1.0;
double r36706394 = r36706392 + r36706393;
double r36706395 = b;
double r36706396 = r36706386 * r36706395;
double r36706397 = r36706396 / r36706389;
double r36706398 = r36706394 + r36706397;
double r36706399 = r36706391 / r36706398;
return r36706399;
}
double f(double x, double y, double z, double t, double a, double b) {
double r36706400 = t;
double r36706401 = -4.147142268992736e-47;
bool r36706402 = r36706400 <= r36706401;
double r36706403 = x;
double r36706404 = y;
double r36706405 = z;
double r36706406 = r36706400 / r36706405;
double r36706407 = r36706404 / r36706406;
double r36706408 = r36706403 + r36706407;
double r36706409 = 1.0;
double r36706410 = a;
double r36706411 = r36706409 + r36706410;
double r36706412 = b;
double r36706413 = r36706400 / r36706412;
double r36706414 = r36706404 / r36706413;
double r36706415 = r36706411 + r36706414;
double r36706416 = r36706408 / r36706415;
double r36706417 = 1.1596870659198286e-206;
bool r36706418 = r36706400 <= r36706417;
double r36706419 = r36706404 * r36706405;
double r36706420 = r36706419 / r36706400;
double r36706421 = r36706420 + r36706403;
double r36706422 = cbrt(r36706421);
double r36706423 = r36706422 * r36706422;
double r36706424 = r36706404 * r36706412;
double r36706425 = r36706424 / r36706400;
double r36706426 = r36706411 + r36706425;
double r36706427 = r36706426 / r36706422;
double r36706428 = r36706423 / r36706427;
double r36706429 = r36706418 ? r36706428 : r36706416;
double r36706430 = r36706402 ? r36706416 : r36706429;
return r36706430;
}




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.3 |
|---|---|
| Target | 12.8 |
| Herbie | 13.5 |
if t < -4.147142268992736e-47 or 1.1596870659198286e-206 < t Initial program 12.6
rmApplied associate-/l*11.2
rmApplied associate-/l*8.5
if -4.147142268992736e-47 < t < 1.1596870659198286e-206Initial program 25.3
rmApplied add-cube-cbrt25.8
Applied associate-/l*25.8
Final simplification13.5
herbie shell --seed 2019171
(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))))