\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;x \le -5.2397542741238042 \cdot 10^{75}:\\
\;\;\;\;\frac{x}{x + 1}\\
\mathbf{elif}\;x \le 1.6767146492905612 \cdot 10^{-298}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(y, z, -x\right)}{\mathsf{fma}\left(z, t, -x\right)} + x}{x + 1}\\
\mathbf{elif}\;x \le 8.170967915147022 \cdot 10^{-257}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{elif}\;x \le 1.5358753841431232 \cdot 10^{90}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(y, z, -x\right)}{\mathsf{fma}\left(z, t, -x\right)} + x}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r780924 = x;
double r780925 = y;
double r780926 = z;
double r780927 = r780925 * r780926;
double r780928 = r780927 - r780924;
double r780929 = t;
double r780930 = r780929 * r780926;
double r780931 = r780930 - r780924;
double r780932 = r780928 / r780931;
double r780933 = r780924 + r780932;
double r780934 = 1.0;
double r780935 = r780924 + r780934;
double r780936 = r780933 / r780935;
return r780936;
}
double f(double x, double y, double z, double t) {
double r780937 = x;
double r780938 = -5.239754274123804e+75;
bool r780939 = r780937 <= r780938;
double r780940 = 1.0;
double r780941 = r780937 + r780940;
double r780942 = r780937 / r780941;
double r780943 = 1.6767146492905612e-298;
bool r780944 = r780937 <= r780943;
double r780945 = y;
double r780946 = z;
double r780947 = -r780937;
double r780948 = fma(r780945, r780946, r780947);
double r780949 = t;
double r780950 = fma(r780946, r780949, r780947);
double r780951 = r780948 / r780950;
double r780952 = r780951 + r780937;
double r780953 = r780952 / r780941;
double r780954 = 8.170967915147022e-257;
bool r780955 = r780937 <= r780954;
double r780956 = r780945 / r780949;
double r780957 = r780937 + r780956;
double r780958 = r780957 / r780941;
double r780959 = 1.5358753841431232e+90;
bool r780960 = r780937 <= r780959;
double r780961 = r780960 ? r780953 : r780942;
double r780962 = r780955 ? r780958 : r780961;
double r780963 = r780944 ? r780953 : r780962;
double r780964 = r780939 ? r780942 : r780963;
return r780964;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.0 |
|---|---|
| Target | 0.4 |
| Herbie | 5.5 |
if x < -5.239754274123804e+75 or 1.5358753841431232e+90 < x Initial program 7.7
Taylor expanded around 0 3.3
if -5.239754274123804e+75 < x < 1.6767146492905612e-298 or 8.170967915147022e-257 < x < 1.5358753841431232e+90Initial program 6.4
rmApplied *-un-lft-identity6.4
Applied associate-/r*6.4
Simplified6.4
if 1.6767146492905612e-298 < x < 8.170967915147022e-257Initial program 10.7
Taylor expanded around inf 14.7
Final simplification5.5
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)))