Average Error: 7.3 → 4.6
Time: 23.7s
Precision: 64
\[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
\[\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{1 + x} - \frac{x \cdot \frac{1}{t \cdot z - x}}{x + 1}\]
\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}
\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{1 + x} - \frac{x \cdot \frac{1}{t \cdot z - x}}{x + 1}
double f(double x, double y, double z, double t) {
        double r412258 = x;
        double r412259 = y;
        double r412260 = z;
        double r412261 = r412259 * r412260;
        double r412262 = r412261 - r412258;
        double r412263 = t;
        double r412264 = r412263 * r412260;
        double r412265 = r412264 - r412258;
        double r412266 = r412262 / r412265;
        double r412267 = r412258 + r412266;
        double r412268 = 1.0;
        double r412269 = r412258 + r412268;
        double r412270 = r412267 / r412269;
        return r412270;
}

double f(double x, double y, double z, double t) {
        double r412271 = y;
        double r412272 = t;
        double r412273 = z;
        double r412274 = r412272 * r412273;
        double r412275 = x;
        double r412276 = r412274 - r412275;
        double r412277 = r412271 / r412276;
        double r412278 = fma(r412277, r412273, r412275);
        double r412279 = 1.0;
        double r412280 = r412279 + r412275;
        double r412281 = r412278 / r412280;
        double r412282 = 1.0;
        double r412283 = r412282 / r412276;
        double r412284 = r412275 * r412283;
        double r412285 = r412275 + r412279;
        double r412286 = r412284 / r412285;
        double r412287 = r412281 - r412286;
        return r412287;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original7.3
Target0.3
Herbie4.6
\[\frac{x + \left(\frac{y}{t - \frac{x}{z}} - \frac{x}{t \cdot z - x}\right)}{x + 1}\]

Derivation

  1. Initial program 7.3

    \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
  2. Using strategy rm
  3. Applied div-sub7.3

    \[\leadsto \frac{x + \color{blue}{\left(\frac{y \cdot z}{t \cdot z - x} - \frac{x}{t \cdot z - x}\right)}}{x + 1}\]
  4. Applied associate-+r-7.3

    \[\leadsto \frac{\color{blue}{\left(x + \frac{y \cdot z}{t \cdot z - x}\right) - \frac{x}{t \cdot z - x}}}{x + 1}\]
  5. Applied div-sub7.3

    \[\leadsto \color{blue}{\frac{x + \frac{y \cdot z}{t \cdot z - x}}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}}\]
  6. Simplified4.6

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{1 + x}} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\]
  7. Using strategy rm
  8. Applied div-inv4.6

    \[\leadsto \frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{1 + x} - \frac{\color{blue}{x \cdot \frac{1}{t \cdot z - x}}}{x + 1}\]
  9. Final simplification4.6

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

Reproduce

herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Trail:splitAtParam  from diagrams-lib-1.3.0.3, A"
  :precision binary64

  :herbie-target
  (/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))

  (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))