\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;x \le 2.20761997366181834 \cdot 10^{-298} \lor \neg \left(x \le 1.374279956057484 \cdot 10^{-254}\right):\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t \cdot z - x}}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r730577 = x;
double r730578 = y;
double r730579 = z;
double r730580 = r730578 * r730579;
double r730581 = r730580 - r730577;
double r730582 = t;
double r730583 = r730582 * r730579;
double r730584 = r730583 - r730577;
double r730585 = r730581 / r730584;
double r730586 = r730577 + r730585;
double r730587 = 1.0;
double r730588 = r730577 + r730587;
double r730589 = r730586 / r730588;
return r730589;
}
double f(double x, double y, double z, double t) {
double r730590 = x;
double r730591 = 2.2076199736618183e-298;
bool r730592 = r730590 <= r730591;
double r730593 = 1.3742799560574841e-254;
bool r730594 = r730590 <= r730593;
double r730595 = !r730594;
bool r730596 = r730592 || r730595;
double r730597 = y;
double r730598 = z;
double r730599 = t;
double r730600 = r730599 * r730598;
double r730601 = r730600 - r730590;
double r730602 = r730598 / r730601;
double r730603 = r730597 * r730602;
double r730604 = r730590 + r730603;
double r730605 = 1.0;
double r730606 = r730590 + r730605;
double r730607 = r730604 / r730606;
double r730608 = r730590 / r730601;
double r730609 = r730608 / r730606;
double r730610 = r730607 - r730609;
double r730611 = r730597 / r730599;
double r730612 = r730590 + r730611;
double r730613 = r730612 / r730606;
double r730614 = r730596 ? r730610 : r730613;
return r730614;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 0.4 |
| Herbie | 2.5 |
if x < 2.2076199736618183e-298 or 1.3742799560574841e-254 < x Initial program 6.9
rmApplied div-sub6.9
Simplified2.1
rmApplied associate-+r-2.1
Applied div-sub2.1
if 2.2076199736618183e-298 < x < 1.3742799560574841e-254Initial program 10.8
Taylor expanded around inf 14.9
Final simplification2.5
herbie shell --seed 2020047
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))