\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 3.55619618466358326 \cdot 10^{-252}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(y, z \cdot \frac{1}{t \cdot z - x}, x\right)}{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 r610706 = x;
double r610707 = y;
double r610708 = z;
double r610709 = r610707 * r610708;
double r610710 = r610709 - r610706;
double r610711 = t;
double r610712 = r610711 * r610708;
double r610713 = r610712 - r610706;
double r610714 = r610710 / r610713;
double r610715 = r610706 + r610714;
double r610716 = 1.0;
double r610717 = r610706 + r610716;
double r610718 = r610715 / r610717;
return r610718;
}
double f(double x, double y, double z, double t) {
double r610719 = x;
double r610720 = 2.2076199736618183e-298;
bool r610721 = r610719 <= r610720;
double r610722 = 3.5561961846635833e-252;
bool r610723 = r610719 <= r610722;
double r610724 = !r610723;
bool r610725 = r610721 || r610724;
double r610726 = y;
double r610727 = z;
double r610728 = 1.0;
double r610729 = t;
double r610730 = r610729 * r610727;
double r610731 = r610730 - r610719;
double r610732 = r610728 / r610731;
double r610733 = r610727 * r610732;
double r610734 = fma(r610726, r610733, r610719);
double r610735 = 1.0;
double r610736 = r610719 + r610735;
double r610737 = r610734 / r610736;
double r610738 = r610719 / r610731;
double r610739 = r610738 / r610736;
double r610740 = r610737 - r610739;
double r610741 = r610726 / r610729;
double r610742 = r610719 + r610741;
double r610743 = r610742 / r610736;
double r610744 = r610725 ? r610740 : r610743;
return r610744;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.0 |
|---|---|
| Target | 0.4 |
| Herbie | 2.6 |
if x < 2.2076199736618183e-298 or 3.5561961846635833e-252 < x Initial program 6.9
rmApplied div-sub6.9
Simplified2.1
rmApplied associate-+r-2.1
Applied div-sub2.1
Simplified2.1
rmApplied div-inv2.1
if 2.2076199736618183e-298 < x < 3.5561961846635833e-252Initial program 10.5
Taylor expanded around inf 15.1
Final simplification2.6
herbie shell --seed 2020047 +o rules:numerics
(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)))