\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -2.42436157433539514 \cdot 10^{38}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\frac{\frac{t}{b}}{\sqrt[3]{y}}}}\\
\mathbf{elif}\;t \le 1.1580474353914635 \cdot 10^{-29}:\\
\;\;\;\;\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t} \cdot 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 r847464 = x;
double r847465 = y;
double r847466 = z;
double r847467 = r847465 * r847466;
double r847468 = t;
double r847469 = r847467 / r847468;
double r847470 = r847464 + r847469;
double r847471 = a;
double r847472 = 1.0;
double r847473 = r847471 + r847472;
double r847474 = b;
double r847475 = r847465 * r847474;
double r847476 = r847475 / r847468;
double r847477 = r847473 + r847476;
double r847478 = r847470 / r847477;
return r847478;
}
double f(double x, double y, double z, double t, double a, double b) {
double r847479 = t;
double r847480 = -2.424361574335395e+38;
bool r847481 = r847479 <= r847480;
double r847482 = x;
double r847483 = y;
double r847484 = z;
double r847485 = r847479 / r847484;
double r847486 = r847483 / r847485;
double r847487 = r847482 + r847486;
double r847488 = a;
double r847489 = 1.0;
double r847490 = r847488 + r847489;
double r847491 = cbrt(r847483);
double r847492 = r847491 * r847491;
double r847493 = b;
double r847494 = r847479 / r847493;
double r847495 = r847494 / r847491;
double r847496 = r847492 / r847495;
double r847497 = r847490 + r847496;
double r847498 = r847487 / r847497;
double r847499 = 1.1580474353914635e-29;
bool r847500 = r847479 <= r847499;
double r847501 = r847483 * r847484;
double r847502 = r847501 / r847479;
double r847503 = r847482 + r847502;
double r847504 = 1.0;
double r847505 = r847483 * r847493;
double r847506 = r847505 / r847479;
double r847507 = r847490 + r847506;
double r847508 = r847504 / r847507;
double r847509 = r847503 * r847508;
double r847510 = r847483 / r847479;
double r847511 = r847510 * r847484;
double r847512 = r847482 + r847511;
double r847513 = r847483 / r847494;
double r847514 = r847490 + r847513;
double r847515 = r847512 / r847514;
double r847516 = r847500 ? r847509 : r847515;
double r847517 = r847481 ? r847498 : r847516;
return r847517;
}




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.8 |
|---|---|
| Target | 13.3 |
| Herbie | 13.1 |
if t < -2.424361574335395e+38Initial program 11.4
rmApplied associate-/l*7.6
rmApplied associate-/l*3.3
rmApplied add-cube-cbrt3.4
Applied associate-/l*3.4
if -2.424361574335395e+38 < t < 1.1580474353914635e-29Initial program 21.9
rmApplied div-inv21.9
if 1.1580474353914635e-29 < t Initial program 12.3
rmApplied associate-/l*9.4
rmApplied associate-/l*5.3
rmApplied associate-/r/5.5
Final simplification13.1
herbie shell --seed 2020046
(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))))