Average Error: 1.5 → 0.4
Time: 20.9s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -4.245390209416525 \cdot 10^{+107}:\\ \;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{elif}\;x \le 6.0780598867908964 \cdot 10^{-49}:\\ \;\;\;\;\left|\mathsf{fma}\left(-z, \frac{x}{y}, \frac{x}{y} \cdot z\right) + \mathsf{fma}\left(1, \frac{4 + x}{y}, \frac{-1}{y} \cdot \left(z \cdot x\right)\right)\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{4 + x}{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 -4.245390209416525 \cdot 10^{+107}:\\
\;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\

\mathbf{elif}\;x \le 6.0780598867908964 \cdot 10^{-49}:\\
\;\;\;\;\left|\mathsf{fma}\left(-z, \frac{x}{y}, \frac{x}{y} \cdot z\right) + \mathsf{fma}\left(1, \frac{4 + x}{y}, \frac{-1}{y} \cdot \left(z \cdot x\right)\right)\right|\\

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

\end{array}
double f(double x, double y, double z) {
        double r972515 = x;
        double r972516 = 4.0;
        double r972517 = r972515 + r972516;
        double r972518 = y;
        double r972519 = r972517 / r972518;
        double r972520 = r972515 / r972518;
        double r972521 = z;
        double r972522 = r972520 * r972521;
        double r972523 = r972519 - r972522;
        double r972524 = fabs(r972523);
        return r972524;
}

double f(double x, double y, double z) {
        double r972525 = x;
        double r972526 = -4.245390209416525e+107;
        bool r972527 = r972525 <= r972526;
        double r972528 = 4.0;
        double r972529 = r972528 + r972525;
        double r972530 = y;
        double r972531 = r972529 / r972530;
        double r972532 = z;
        double r972533 = r972532 / r972530;
        double r972534 = r972525 * r972533;
        double r972535 = r972531 - r972534;
        double r972536 = fabs(r972535);
        double r972537 = 6.0780598867908964e-49;
        bool r972538 = r972525 <= r972537;
        double r972539 = -r972532;
        double r972540 = r972525 / r972530;
        double r972541 = r972540 * r972532;
        double r972542 = fma(r972539, r972540, r972541);
        double r972543 = 1.0;
        double r972544 = -1.0;
        double r972545 = r972544 / r972530;
        double r972546 = r972532 * r972525;
        double r972547 = r972545 * r972546;
        double r972548 = fma(r972543, r972531, r972547);
        double r972549 = r972542 + r972548;
        double r972550 = fabs(r972549);
        double r972551 = r972538 ? r972550 : r972536;
        double r972552 = r972527 ? r972536 : r972551;
        return r972552;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Split input into 2 regimes
  2. if x < -4.245390209416525e+107 or 6.0780598867908964e-49 < x

    1. Initial program 0.1

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

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

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

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

    if -4.245390209416525e+107 < x < 6.0780598867908964e-49

    1. Initial program 2.3

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

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

      \[\leadsto \left|\color{blue}{\mathsf{fma}\left(1, \frac{x + 4}{y}, -z \cdot \frac{x}{y}\right) + \mathsf{fma}\left(-z, \frac{x}{y}, z \cdot \frac{x}{y}\right)}\right|\]
    5. Using strategy rm
    6. Applied div-inv2.3

      \[\leadsto \left|\mathsf{fma}\left(1, \frac{x + 4}{y}, -z \cdot \color{blue}{\left(x \cdot \frac{1}{y}\right)}\right) + \mathsf{fma}\left(-z, \frac{x}{y}, z \cdot \frac{x}{y}\right)\right|\]
    7. Applied associate-*r*0.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -4.245390209416525 \cdot 10^{+107}:\\ \;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\ \mathbf{elif}\;x \le 6.0780598867908964 \cdot 10^{-49}:\\ \;\;\;\;\left|\mathsf{fma}\left(-z, \frac{x}{y}, \frac{x}{y} \cdot z\right) + \mathsf{fma}\left(1, \frac{4 + x}{y}, \frac{-1}{y} \cdot \left(z \cdot x\right)\right)\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{4 + x}{y} - x \cdot \frac{z}{y}\right|\\ \end{array}\]

Reproduce

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