Average Error: 1.7 → 0.5
Time: 4.3s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -183289315107.79150390625 \lor \neg \left(x \le 3.117271429447084268719680709465628154511 \cdot 10^{-169}\right):\\ \;\;\;\;\left|\frac{-\left(x + 4\right)}{-y} - \frac{x}{y} \cdot z\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{\left(x + 4\right) - x \cdot z}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le -183289315107.79150390625 \lor \neg \left(x \le 3.117271429447084268719680709465628154511 \cdot 10^{-169}\right):\\
\;\;\;\;\left|\frac{-\left(x + 4\right)}{-y} - \frac{x}{y} \cdot z\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r34173 = x;
        double r34174 = 4.0;
        double r34175 = r34173 + r34174;
        double r34176 = y;
        double r34177 = r34175 / r34176;
        double r34178 = r34173 / r34176;
        double r34179 = z;
        double r34180 = r34178 * r34179;
        double r34181 = r34177 - r34180;
        double r34182 = fabs(r34181);
        return r34182;
}

double f(double x, double y, double z) {
        double r34183 = x;
        double r34184 = -183289315107.7915;
        bool r34185 = r34183 <= r34184;
        double r34186 = 3.117271429447084e-169;
        bool r34187 = r34183 <= r34186;
        double r34188 = !r34187;
        bool r34189 = r34185 || r34188;
        double r34190 = 4.0;
        double r34191 = r34183 + r34190;
        double r34192 = -r34191;
        double r34193 = y;
        double r34194 = -r34193;
        double r34195 = r34192 / r34194;
        double r34196 = r34183 / r34193;
        double r34197 = z;
        double r34198 = r34196 * r34197;
        double r34199 = r34195 - r34198;
        double r34200 = fabs(r34199);
        double r34201 = r34183 * r34197;
        double r34202 = r34191 - r34201;
        double r34203 = r34202 / r34193;
        double r34204 = fabs(r34203);
        double r34205 = r34189 ? r34200 : r34204;
        return r34205;
}

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 < -183289315107.7915 or 3.117271429447084e-169 < x

    1. Initial program 0.8

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

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

    if -183289315107.7915 < x < 3.117271429447084e-169

    1. Initial program 2.8

      \[\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.5

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

Reproduce

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