Average Error: 7.6 → 4.7
Time: 4.6s
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)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{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)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}
double f(double x, double y, double z, double t) {
        double r946561 = x;
        double r946562 = y;
        double r946563 = z;
        double r946564 = r946562 * r946563;
        double r946565 = r946564 - r946561;
        double r946566 = t;
        double r946567 = r946566 * r946563;
        double r946568 = r946567 - r946561;
        double r946569 = r946565 / r946568;
        double r946570 = r946561 + r946569;
        double r946571 = 1.0;
        double r946572 = r946561 + r946571;
        double r946573 = r946570 / r946572;
        return r946573;
}

double f(double x, double y, double z, double t) {
        double r946574 = y;
        double r946575 = t;
        double r946576 = z;
        double r946577 = r946575 * r946576;
        double r946578 = x;
        double r946579 = r946577 - r946578;
        double r946580 = r946574 / r946579;
        double r946581 = fma(r946580, r946576, r946578);
        double r946582 = 1.0;
        double r946583 = r946578 + r946582;
        double r946584 = 1.0;
        double r946585 = r946583 * r946584;
        double r946586 = r946581 / r946585;
        double r946587 = r946578 / r946579;
        double r946588 = r946587 / r946583;
        double r946589 = r946586 - r946588;
        return r946589;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

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

Derivation

  1. Initial program 7.6

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

    \[\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.6

    \[\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.6

    \[\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.7

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

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

Reproduce

herbie shell --seed 2020025 +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)))