Average Error: 1.8 → 1.8
Time: 9.7s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\left|\mathsf{fma}\left(\frac{x}{y}, 1 - z, \frac{4}{y}\right)\right|\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\left|\mathsf{fma}\left(\frac{x}{y}, 1 - z, \frac{4}{y}\right)\right|
double f(double x, double y, double z) {
        double r45742 = x;
        double r45743 = 4.0;
        double r45744 = r45742 + r45743;
        double r45745 = y;
        double r45746 = r45744 / r45745;
        double r45747 = r45742 / r45745;
        double r45748 = z;
        double r45749 = r45747 * r45748;
        double r45750 = r45746 - r45749;
        double r45751 = fabs(r45750);
        return r45751;
}

double f(double x, double y, double z) {
        double r45752 = x;
        double r45753 = y;
        double r45754 = r45752 / r45753;
        double r45755 = 1.0;
        double r45756 = z;
        double r45757 = r45755 - r45756;
        double r45758 = 4.0;
        double r45759 = r45758 / r45753;
        double r45760 = fma(r45754, r45757, r45759);
        double r45761 = fabs(r45760);
        return r45761;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 1.8

    \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
  2. Taylor expanded around 0 3.8

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

    \[\leadsto \left|\color{blue}{\mathsf{fma}\left(\frac{x}{y}, 1 - z, \frac{4}{y}\right)}\right|\]
  4. Final simplification1.8

    \[\leadsto \left|\mathsf{fma}\left(\frac{x}{y}, 1 - z, \frac{4}{y}\right)\right|\]

Reproduce

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