Average Error: 1.7 → 0.6
Time: 16.1s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.999124164362740075741348219369766432845 \cdot 10^{-59}:\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{elif}\;x \le 8.845625549732625789022603988355496545354 \cdot 10^{-128}:\\ \;\;\;\;\left|\frac{\left(x + 4\right) - x \cdot z}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le -1.999124164362740075741348219369766432845 \cdot 10^{-59}:\\
\;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\

\mathbf{elif}\;x \le 8.845625549732625789022603988355496545354 \cdot 10^{-128}:\\
\;\;\;\;\left|\frac{\left(x + 4\right) - 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 r2904497 = x;
        double r2904498 = 4.0;
        double r2904499 = r2904497 + r2904498;
        double r2904500 = y;
        double r2904501 = r2904499 / r2904500;
        double r2904502 = r2904497 / r2904500;
        double r2904503 = z;
        double r2904504 = r2904502 * r2904503;
        double r2904505 = r2904501 - r2904504;
        double r2904506 = fabs(r2904505);
        return r2904506;
}

double f(double x, double y, double z) {
        double r2904507 = x;
        double r2904508 = -1.99912416436274e-59;
        bool r2904509 = r2904507 <= r2904508;
        double r2904510 = 4.0;
        double r2904511 = r2904507 + r2904510;
        double r2904512 = y;
        double r2904513 = r2904511 / r2904512;
        double r2904514 = z;
        double r2904515 = r2904514 / r2904512;
        double r2904516 = r2904507 * r2904515;
        double r2904517 = r2904513 - r2904516;
        double r2904518 = fabs(r2904517);
        double r2904519 = 8.845625549732626e-128;
        bool r2904520 = r2904507 <= r2904519;
        double r2904521 = r2904507 * r2904514;
        double r2904522 = r2904511 - r2904521;
        double r2904523 = r2904522 / r2904512;
        double r2904524 = fabs(r2904523);
        double r2904525 = r2904520 ? r2904524 : r2904518;
        double r2904526 = r2904509 ? r2904518 : r2904525;
        return r2904526;
}

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 2 regimes
  2. if x < -1.99912416436274e-59 or 8.845625549732626e-128 < x

    1. Initial program 0.7

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

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

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

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

    if -1.99912416436274e-59 < x < 8.845625549732626e-128

    1. Initial program 3.0

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

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

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

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

Reproduce

herbie shell --seed 2019173 
(FPCore (x y z)
  :name "fabs fraction 1"
  (fabs (- (/ (+ x 4.0) y) (* (/ x y) z))))