Average Error: 1.5 → 0.2
Time: 18.1s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -4.566012676414608 \cdot 10^{-11}:\\ \;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{elif}\;x \le 1.7329015777673845 \cdot 10^{+52}:\\ \;\;\;\;\left|\frac{\left(4 + x\right) - z \cdot x}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le -4.566012676414608 \cdot 10^{-11}:\\
\;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\

\mathbf{elif}\;x \le 1.7329015777673845 \cdot 10^{+52}:\\
\;\;\;\;\left|\frac{\left(4 + x\right) - z \cdot x}{y}\right|\\

\mathbf{else}:\\
\;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\

\end{array}
double f(double x, double y, double z) {
        double r894222 = x;
        double r894223 = 4.0;
        double r894224 = r894222 + r894223;
        double r894225 = y;
        double r894226 = r894224 / r894225;
        double r894227 = r894222 / r894225;
        double r894228 = z;
        double r894229 = r894227 * r894228;
        double r894230 = r894226 - r894229;
        double r894231 = fabs(r894230);
        return r894231;
}

double f(double x, double y, double z) {
        double r894232 = x;
        double r894233 = -4.566012676414608e-11;
        bool r894234 = r894232 <= r894233;
        double r894235 = 4.0;
        double r894236 = r894235 + r894232;
        double r894237 = y;
        double r894238 = r894236 / r894237;
        double r894239 = z;
        double r894240 = r894239 / r894237;
        double r894241 = r894232 * r894240;
        double r894242 = r894238 - r894241;
        double r894243 = fabs(r894242);
        double r894244 = 1.7329015777673845e+52;
        bool r894245 = r894232 <= r894244;
        double r894246 = r894239 * r894232;
        double r894247 = r894236 - r894246;
        double r894248 = r894247 / r894237;
        double r894249 = fabs(r894248);
        double r894250 = r894232 / r894237;
        double r894251 = r894250 * r894239;
        double r894252 = r894238 - r894251;
        double r894253 = fabs(r894252);
        double r894254 = r894245 ? r894249 : r894253;
        double r894255 = r894234 ? r894243 : r894254;
        return r894255;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if x < -4.566012676414608e-11

    1. Initial program 0.1

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied div-inv0.2

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\left(x \cdot \frac{1}{y}\right)} \cdot z\right|\]
    4. Applied associate-*l*0.2

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{x \cdot \left(\frac{1}{y} \cdot z\right)}\right|\]
    5. Simplified0.2

      \[\leadsto \left|\frac{x + 4}{y} - x \cdot \color{blue}{\frac{z}{y}}\right|\]

    if -4.566012676414608e-11 < x < 1.7329015777673845e+52

    1. Initial program 2.3

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied associate-*l/0.2

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\frac{x \cdot z}{y}}\right|\]
    4. Applied sub-div0.2

      \[\leadsto \left|\color{blue}{\frac{\left(x + 4\right) - x \cdot z}{y}}\right|\]

    if 1.7329015777673845e+52 < x

    1. Initial program 0.1

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.1

      \[\leadsto \left|\frac{x + 4}{\color{blue}{1 \cdot y}} - \frac{x}{y} \cdot z\right|\]
    4. Applied associate-/r*0.1

      \[\leadsto \left|\color{blue}{\frac{\frac{x + 4}{1}}{y}} - \frac{x}{y} \cdot z\right|\]
    5. Simplified0.1

      \[\leadsto \left|\frac{\color{blue}{4 + x}}{y} - \frac{x}{y} \cdot z\right|\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -4.566012676414608 \cdot 10^{-11}:\\ \;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{elif}\;x \le 1.7329015777673845 \cdot 10^{+52}:\\ \;\;\;\;\left|\frac{\left(4 + x\right) - z \cdot x}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\ \end{array}\]

Reproduce

herbie shell --seed 2019132 +o rules:numerics
(FPCore (x y z)
  :name "fabs fraction 1"
  (fabs (- (/ (+ x 4) y) (* (/ x y) z))))