Average Error: 1.6 → 1.7
Time: 15.7s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -1316369279572.4138:\\ \;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\left(\left(4 + x\right) - x \cdot z\right) \cdot \frac{1}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le -1316369279572.4138:\\
\;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r892655 = x;
        double r892656 = 4.0;
        double r892657 = r892655 + r892656;
        double r892658 = y;
        double r892659 = r892657 / r892658;
        double r892660 = r892655 / r892658;
        double r892661 = z;
        double r892662 = r892660 * r892661;
        double r892663 = r892659 - r892662;
        double r892664 = fabs(r892663);
        return r892664;
}

double f(double x, double y, double z) {
        double r892665 = x;
        double r892666 = -1316369279572.4138;
        bool r892667 = r892665 <= r892666;
        double r892668 = 4.0;
        double r892669 = r892668 + r892665;
        double r892670 = y;
        double r892671 = r892669 / r892670;
        double r892672 = r892665 / r892670;
        double r892673 = z;
        double r892674 = r892672 * r892673;
        double r892675 = r892671 - r892674;
        double r892676 = fabs(r892675);
        double r892677 = r892665 * r892673;
        double r892678 = r892669 - r892677;
        double r892679 = 1.0;
        double r892680 = r892679 / r892670;
        double r892681 = r892678 * r892680;
        double r892682 = fabs(r892681);
        double r892683 = r892667 ? r892676 : r892682;
        return r892683;
}

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 < -1316369279572.4138

    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|\]

    if -1316369279572.4138 < x

    1. Initial program 1.9

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

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

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

      \[\leadsto \left|\frac{\color{blue}{4 + x}}{y} - \frac{x}{y} \cdot z\right|\]
    6. Using strategy rm
    7. Applied associate-*l/2.0

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

      \[\leadsto \left|\color{blue}{\frac{\left(4 + x\right) - x \cdot z}{y}}\right|\]
    9. Using strategy rm
    10. Applied div-inv2.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1316369279572.4138:\\ \;\;\;\;\left|\frac{4 + x}{y} - \frac{x}{y} \cdot z\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\left(\left(4 + x\right) - x \cdot z\right) \cdot \frac{1}{y}\right|\\ \end{array}\]

Reproduce

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