\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\begin{array}{l}
\mathbf{if}\;x \le 1.968897763889820057096245510304041678837 \cdot 10^{89}:\\
\;\;\;\;\left|\frac{x + 4}{y} - \frac{x \cdot z}{y}\right|\\
\mathbf{else}:\\
\;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\
\end{array}double f(double x, double y, double z) {
double r22011 = x;
double r22012 = 4.0;
double r22013 = r22011 + r22012;
double r22014 = y;
double r22015 = r22013 / r22014;
double r22016 = r22011 / r22014;
double r22017 = z;
double r22018 = r22016 * r22017;
double r22019 = r22015 - r22018;
double r22020 = fabs(r22019);
return r22020;
}
double f(double x, double y, double z) {
double r22021 = x;
double r22022 = 1.96889776388982e+89;
bool r22023 = r22021 <= r22022;
double r22024 = 4.0;
double r22025 = r22021 + r22024;
double r22026 = y;
double r22027 = r22025 / r22026;
double r22028 = z;
double r22029 = r22021 * r22028;
double r22030 = r22029 / r22026;
double r22031 = r22027 - r22030;
double r22032 = fabs(r22031);
double r22033 = r22028 / r22026;
double r22034 = r22021 * r22033;
double r22035 = r22027 - r22034;
double r22036 = fabs(r22035);
double r22037 = r22023 ? r22032 : r22036;
return r22037;
}



Bits error versus x



Bits error versus y



Bits error versus z
Results
if x < 1.96889776388982e+89Initial program 1.6
rmApplied *-un-lft-identity1.6
rmApplied associate-*l/1.9
Simplified1.9
if 1.96889776388982e+89 < x Initial program 0.1
rmApplied *-un-lft-identity0.1
rmApplied div-inv0.1
Applied associate-*l*0.1
Simplified0.1
Final simplification1.7
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x y z)
:name "fabs fraction 1"
(fabs (- (/ (+ x 4.0) y) (* (/ x y) z))))