Average Error: 1.7 → 1.8
Time: 14.4s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le 2.331683792302665078276548190002856814797 \cdot 10^{-52}:\\ \;\;\;\;\left|\left(\frac{x}{y} + \frac{4}{y}\right) - \frac{x \cdot z}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\left(\frac{x}{y} + \frac{4}{y}\right) - \frac{x}{\frac{y}{z}}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le 2.331683792302665078276548190002856814797 \cdot 10^{-52}:\\
\;\;\;\;\left|\left(\frac{x}{y} + \frac{4}{y}\right) - \frac{x \cdot z}{y}\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r1659557 = x;
        double r1659558 = 4.0;
        double r1659559 = r1659557 + r1659558;
        double r1659560 = y;
        double r1659561 = r1659559 / r1659560;
        double r1659562 = r1659557 / r1659560;
        double r1659563 = z;
        double r1659564 = r1659562 * r1659563;
        double r1659565 = r1659561 - r1659564;
        double r1659566 = fabs(r1659565);
        return r1659566;
}

double f(double x, double y, double z) {
        double r1659567 = x;
        double r1659568 = 2.331683792302665e-52;
        bool r1659569 = r1659567 <= r1659568;
        double r1659570 = y;
        double r1659571 = r1659567 / r1659570;
        double r1659572 = 4.0;
        double r1659573 = r1659572 / r1659570;
        double r1659574 = r1659571 + r1659573;
        double r1659575 = z;
        double r1659576 = r1659567 * r1659575;
        double r1659577 = r1659576 / r1659570;
        double r1659578 = r1659574 - r1659577;
        double r1659579 = fabs(r1659578);
        double r1659580 = r1659570 / r1659575;
        double r1659581 = r1659567 / r1659580;
        double r1659582 = r1659574 - r1659581;
        double r1659583 = fabs(r1659582);
        double r1659584 = r1659569 ? r1659579 : r1659583;
        return r1659584;
}

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 < 2.331683792302665e-52

    1. Initial program 2.1

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Taylor expanded around 0 2.2

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

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

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

    if 2.331683792302665e-52 < x

    1. Initial program 0.3

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Taylor expanded around 0 0.3

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

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

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

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

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

Reproduce

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