Average Error: 1.6 → 1.6
Time: 3.2s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le 5.5178987553970897 \cdot 10^{-123}:\\ \;\;\;\;\left|\frac{x + 4}{y} - \frac{1}{\sqrt[3]{y} \cdot \sqrt[3]{y}} \cdot \left(\frac{x}{\sqrt[3]{y}} \cdot z\right)\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le 5.5178987553970897 \cdot 10^{-123}:\\
\;\;\;\;\left|\frac{x + 4}{y} - \frac{1}{\sqrt[3]{y} \cdot \sqrt[3]{y}} \cdot \left(\frac{x}{\sqrt[3]{y}} \cdot z\right)\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r27190 = x;
        double r27191 = 4.0;
        double r27192 = r27190 + r27191;
        double r27193 = y;
        double r27194 = r27192 / r27193;
        double r27195 = r27190 / r27193;
        double r27196 = z;
        double r27197 = r27195 * r27196;
        double r27198 = r27194 - r27197;
        double r27199 = fabs(r27198);
        return r27199;
}

double f(double x, double y, double z) {
        double r27200 = x;
        double r27201 = 5.51789875539709e-123;
        bool r27202 = r27200 <= r27201;
        double r27203 = 4.0;
        double r27204 = r27200 + r27203;
        double r27205 = y;
        double r27206 = r27204 / r27205;
        double r27207 = 1.0;
        double r27208 = cbrt(r27205);
        double r27209 = r27208 * r27208;
        double r27210 = r27207 / r27209;
        double r27211 = r27200 / r27208;
        double r27212 = z;
        double r27213 = r27211 * r27212;
        double r27214 = r27210 * r27213;
        double r27215 = r27206 - r27214;
        double r27216 = fabs(r27215);
        double r27217 = r27212 / r27205;
        double r27218 = r27200 * r27217;
        double r27219 = r27206 - r27218;
        double r27220 = fabs(r27219);
        double r27221 = r27202 ? r27216 : r27220;
        return r27221;
}

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 < 5.51789875539709e-123

    1. Initial program 1.9

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied add-cube-cbrt2.1

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

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

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

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

    if 5.51789875539709e-123 < x

    1. Initial program 0.8

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

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

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

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

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

Reproduce

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