\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -7.913399165461686155144823271089923942095 \cdot 10^{-52} \lor \neg \left(t \le 7.626406460332817234650012490007590154937 \cdot 10^{-81}\right):\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\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 r721576 = x;
double r721577 = y;
double r721578 = z;
double r721579 = r721577 * r721578;
double r721580 = t;
double r721581 = r721579 / r721580;
double r721582 = r721576 + r721581;
double r721583 = a;
double r721584 = 1.0;
double r721585 = r721583 + r721584;
double r721586 = b;
double r721587 = r721577 * r721586;
double r721588 = r721587 / r721580;
double r721589 = r721585 + r721588;
double r721590 = r721582 / r721589;
return r721590;
}
double f(double x, double y, double z, double t, double a, double b) {
double r721591 = t;
double r721592 = -7.913399165461686e-52;
bool r721593 = r721591 <= r721592;
double r721594 = 7.626406460332817e-81;
bool r721595 = r721591 <= r721594;
double r721596 = !r721595;
bool r721597 = r721593 || r721596;
double r721598 = x;
double r721599 = y;
double r721600 = z;
double r721601 = r721600 / r721591;
double r721602 = r721599 * r721601;
double r721603 = r721598 + r721602;
double r721604 = a;
double r721605 = 1.0;
double r721606 = r721604 + r721605;
double r721607 = b;
double r721608 = r721607 / r721591;
double r721609 = r721599 * r721608;
double r721610 = r721606 + r721609;
double r721611 = r721603 / r721610;
double r721612 = r721599 * r721600;
double r721613 = 1.0;
double r721614 = r721613 / r721591;
double r721615 = r721612 * r721614;
double r721616 = r721598 + r721615;
double r721617 = r721599 * r721607;
double r721618 = r721617 / r721591;
double r721619 = r721606 + r721618;
double r721620 = r721616 / r721619;
double r721621 = r721597 ? r721611 : r721620;
return r721621;
}




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.1 |
|---|---|
| Target | 12.9 |
| Herbie | 12.5 |
if t < -7.913399165461686e-52 or 7.626406460332817e-81 < t Initial program 11.1
rmApplied *-un-lft-identity11.1
Applied times-frac8.1
Simplified8.1
rmApplied *-un-lft-identity8.1
Applied times-frac5.2
Simplified5.2
if -7.913399165461686e-52 < t < 7.626406460332817e-81Initial program 24.4
rmApplied div-inv24.4
Final simplification12.5
herbie shell --seed 2020001
(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))))