Average Error: 1.6 → 0.1
Time: 15.6s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -7.216452171217796070962596505139175596466 \cdot 10^{-13} \lor \neg \left(x \le 1.766269789257878071992835861687348113288 \cdot 10^{-45}\right):\\ \;\;\;\;\left|\frac{x + 4}{y} - \frac{x}{\frac{y}{z}}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{\sqrt{x + 4}}{\frac{y}{\sqrt{x + 4}}} - \frac{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 -7.216452171217796070962596505139175596466 \cdot 10^{-13} \lor \neg \left(x \le 1.766269789257878071992835861687348113288 \cdot 10^{-45}\right):\\
\;\;\;\;\left|\frac{x + 4}{y} - \frac{x}{\frac{y}{z}}\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r38750 = x;
        double r38751 = 4.0;
        double r38752 = r38750 + r38751;
        double r38753 = y;
        double r38754 = r38752 / r38753;
        double r38755 = r38750 / r38753;
        double r38756 = z;
        double r38757 = r38755 * r38756;
        double r38758 = r38754 - r38757;
        double r38759 = fabs(r38758);
        return r38759;
}

double f(double x, double y, double z) {
        double r38760 = x;
        double r38761 = -7.216452171217796e-13;
        bool r38762 = r38760 <= r38761;
        double r38763 = 1.766269789257878e-45;
        bool r38764 = r38760 <= r38763;
        double r38765 = !r38764;
        bool r38766 = r38762 || r38765;
        double r38767 = 4.0;
        double r38768 = r38760 + r38767;
        double r38769 = y;
        double r38770 = r38768 / r38769;
        double r38771 = z;
        double r38772 = r38769 / r38771;
        double r38773 = r38760 / r38772;
        double r38774 = r38770 - r38773;
        double r38775 = fabs(r38774);
        double r38776 = sqrt(r38768);
        double r38777 = r38769 / r38776;
        double r38778 = r38776 / r38777;
        double r38779 = r38760 * r38771;
        double r38780 = r38779 / r38769;
        double r38781 = r38778 - r38780;
        double r38782 = fabs(r38781);
        double r38783 = r38766 ? r38775 : r38782;
        return r38783;
}

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 < -7.216452171217796e-13 or 1.766269789257878e-45 < x

    1. Initial program 0.2

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

      \[\leadsto \left|\frac{x + 4}{y} - \frac{x}{\color{blue}{1 \cdot y}} \cdot z\right|\]
    4. Applied *-un-lft-identity0.2

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

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

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

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

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

    if -7.216452171217796e-13 < x < 1.766269789257878e-45

    1. Initial program 2.7

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

      \[\leadsto \left|\frac{x + 4}{y} - \frac{x}{\color{blue}{1 \cdot y}} \cdot z\right|\]
    4. Applied *-un-lft-identity2.7

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

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

      \[\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|\]
    8. Using strategy rm
    9. Applied add-sqr-sqrt0.1

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

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

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

Reproduce

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