\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\begin{array}{l}
\mathbf{if}\;y \le -7.768829658364721501136974287207896432773 \cdot 10^{128} \lor \neg \left(y \le 5.145815002744266464401609035602130947601 \cdot 10^{-163}\right):\\
\;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\
\mathbf{else}:\\
\;\;\;\;\left|\frac{x + 4}{y} - \frac{x \cdot z}{y}\right|\\
\end{array}double f(double x, double y, double z) {
double r37014 = x;
double r37015 = 4.0;
double r37016 = r37014 + r37015;
double r37017 = y;
double r37018 = r37016 / r37017;
double r37019 = r37014 / r37017;
double r37020 = z;
double r37021 = r37019 * r37020;
double r37022 = r37018 - r37021;
double r37023 = fabs(r37022);
return r37023;
}
double f(double x, double y, double z) {
double r37024 = y;
double r37025 = -7.768829658364722e+128;
bool r37026 = r37024 <= r37025;
double r37027 = 5.1458150027442665e-163;
bool r37028 = r37024 <= r37027;
double r37029 = !r37028;
bool r37030 = r37026 || r37029;
double r37031 = x;
double r37032 = 4.0;
double r37033 = r37031 + r37032;
double r37034 = r37033 / r37024;
double r37035 = z;
double r37036 = r37035 / r37024;
double r37037 = r37031 * r37036;
double r37038 = r37034 - r37037;
double r37039 = fabs(r37038);
double r37040 = r37031 * r37035;
double r37041 = r37040 / r37024;
double r37042 = r37034 - r37041;
double r37043 = fabs(r37042);
double r37044 = r37030 ? r37039 : r37043;
return r37044;
}



Bits error versus x



Bits error versus y



Bits error versus z
Results
if y < -7.768829658364722e+128 or 5.1458150027442665e-163 < y Initial program 2.5
rmApplied div-inv2.5
Applied associate-*l*1.1
Simplified1.1
if -7.768829658364722e+128 < y < 5.1458150027442665e-163Initial program 0.1
rmApplied div-inv0.2
Applied associate-*l*7.9
Simplified7.9
rmApplied *-un-lft-identity7.9
Applied associate-*l*7.9
Simplified0.9
Final simplification1.0
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z)
:name "fabs fraction 1"
:precision binary64
(fabs (- (/ (+ x 4) y) (* (/ x y) z))))