\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -1.00157721529175776 \cdot 10^{-36} \lor \neg \left(y \le 8.0593349417547793 \cdot 10^{-133}\right):\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\frac{\sqrt[3]{t}}{z}}}{\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 r843374 = x;
double r843375 = y;
double r843376 = z;
double r843377 = r843375 * r843376;
double r843378 = t;
double r843379 = r843377 / r843378;
double r843380 = r843374 + r843379;
double r843381 = a;
double r843382 = 1.0;
double r843383 = r843381 + r843382;
double r843384 = b;
double r843385 = r843375 * r843384;
double r843386 = r843385 / r843378;
double r843387 = r843383 + r843386;
double r843388 = r843380 / r843387;
return r843388;
}
double f(double x, double y, double z, double t, double a, double b) {
double r843389 = y;
double r843390 = -1.0015772152917578e-36;
bool r843391 = r843389 <= r843390;
double r843392 = 8.05933494175478e-133;
bool r843393 = r843389 <= r843392;
double r843394 = !r843393;
bool r843395 = r843391 || r843394;
double r843396 = x;
double r843397 = t;
double r843398 = z;
double r843399 = r843397 / r843398;
double r843400 = r843389 / r843399;
double r843401 = r843396 + r843400;
double r843402 = a;
double r843403 = 1.0;
double r843404 = r843402 + r843403;
double r843405 = b;
double r843406 = r843397 / r843405;
double r843407 = r843389 / r843406;
double r843408 = r843404 + r843407;
double r843409 = r843401 / r843408;
double r843410 = 1.0;
double r843411 = cbrt(r843397);
double r843412 = r843411 * r843411;
double r843413 = r843410 / r843412;
double r843414 = r843411 / r843398;
double r843415 = r843389 / r843414;
double r843416 = r843413 * r843415;
double r843417 = r843396 + r843416;
double r843418 = r843389 * r843405;
double r843419 = r843418 / r843397;
double r843420 = r843404 + r843419;
double r843421 = r843417 / r843420;
double r843422 = r843395 ? r843409 : r843421;
return r843422;
}




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.6 |
|---|---|
| Target | 13.1 |
| Herbie | 13.4 |
if y < -1.0015772152917578e-36 or 8.05933494175478e-133 < y Initial program 25.0
rmApplied associate-/l*22.8
rmApplied associate-/l*19.5
if -1.0015772152917578e-36 < y < 8.05933494175478e-133Initial program 2.5
rmApplied associate-/l*7.0
rmApplied *-un-lft-identity7.0
Applied add-cube-cbrt7.2
Applied times-frac7.2
Applied *-un-lft-identity7.2
Applied times-frac3.1
Simplified3.1
Final simplification13.4
herbie shell --seed 2020089
(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))))