Average Error: 1.7 → 1.7
Time: 3.5s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\left|\mathsf{fma}\left(4, \frac{1}{y}, \frac{x}{y}\right) - \frac{x}{y} \cdot z\right|\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\left|\mathsf{fma}\left(4, \frac{1}{y}, \frac{x}{y}\right) - \frac{x}{y} \cdot z\right|
double f(double x, double y, double z) {
        double r30268 = x;
        double r30269 = 4.0;
        double r30270 = r30268 + r30269;
        double r30271 = y;
        double r30272 = r30270 / r30271;
        double r30273 = r30268 / r30271;
        double r30274 = z;
        double r30275 = r30273 * r30274;
        double r30276 = r30272 - r30275;
        double r30277 = fabs(r30276);
        return r30277;
}

double f(double x, double y, double z) {
        double r30278 = 4.0;
        double r30279 = 1.0;
        double r30280 = y;
        double r30281 = r30279 / r30280;
        double r30282 = x;
        double r30283 = r30282 / r30280;
        double r30284 = fma(r30278, r30281, r30283);
        double r30285 = z;
        double r30286 = r30283 * r30285;
        double r30287 = r30284 - r30286;
        double r30288 = fabs(r30287);
        return r30288;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 1.7

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

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

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

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

Reproduce

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