Average Error: 1.8 → 0.7
Time: 11.2s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;y \le -2.754055242239622748078053160024674983783 \cdot 10^{-15} \lor \neg \left(y \le 2.084993241969870167572598505114458062278 \cdot 10^{-151}\right):\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{x + 4}{y} - \frac{x \cdot z}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;y \le -2.754055242239622748078053160024674983783 \cdot 10^{-15} \lor \neg \left(y \le 2.084993241969870167572598505114458062278 \cdot 10^{-151}\right):\\
\;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r28871 = x;
        double r28872 = 4.0;
        double r28873 = r28871 + r28872;
        double r28874 = y;
        double r28875 = r28873 / r28874;
        double r28876 = r28871 / r28874;
        double r28877 = z;
        double r28878 = r28876 * r28877;
        double r28879 = r28875 - r28878;
        double r28880 = fabs(r28879);
        return r28880;
}

double f(double x, double y, double z) {
        double r28881 = y;
        double r28882 = -2.7540552422396227e-15;
        bool r28883 = r28881 <= r28882;
        double r28884 = 2.08499324196987e-151;
        bool r28885 = r28881 <= r28884;
        double r28886 = !r28885;
        bool r28887 = r28883 || r28886;
        double r28888 = x;
        double r28889 = 4.0;
        double r28890 = r28888 + r28889;
        double r28891 = r28890 / r28881;
        double r28892 = z;
        double r28893 = r28892 / r28881;
        double r28894 = r28888 * r28893;
        double r28895 = r28891 - r28894;
        double r28896 = fabs(r28895);
        double r28897 = r28888 * r28892;
        double r28898 = r28897 / r28881;
        double r28899 = r28891 - r28898;
        double r28900 = fabs(r28899);
        double r28901 = r28887 ? r28896 : r28900;
        return r28901;
}

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 y < -2.7540552422396227e-15 or 2.08499324196987e-151 < y

    1. Initial program 2.4

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

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

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

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

    if -2.7540552422396227e-15 < y < 2.08499324196987e-151

    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}{y} - \frac{x}{\color{blue}{1 \cdot y}} \cdot z\right|\]
    4. Applied *-un-lft-identity0.1

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

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

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

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

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

Reproduce

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