Average Error: 6.5 → 2.1
Time: 56.3s
Precision: 64
\[x + \frac{y \cdot \left(z - x\right)}{t}\]
\[\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\]
x + \frac{y \cdot \left(z - x\right)}{t}
\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)
double f(double x, double y, double z, double t) {
        double r9845109 = x;
        double r9845110 = y;
        double r9845111 = z;
        double r9845112 = r9845111 - r9845109;
        double r9845113 = r9845110 * r9845112;
        double r9845114 = t;
        double r9845115 = r9845113 / r9845114;
        double r9845116 = r9845109 + r9845115;
        return r9845116;
}

double f(double x, double y, double z, double t) {
        double r9845117 = y;
        double r9845118 = t;
        double r9845119 = r9845117 / r9845118;
        double r9845120 = z;
        double r9845121 = x;
        double r9845122 = r9845120 - r9845121;
        double r9845123 = fma(r9845119, r9845122, r9845121);
        return r9845123;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original6.5
Target2.1
Herbie2.1
\[x - \left(x \cdot \frac{y}{t} + \left(-z\right) \cdot \frac{y}{t}\right)\]

Derivation

  1. Initial program 6.5

    \[x + \frac{y \cdot \left(z - x\right)}{t}\]
  2. Simplified2.1

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

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

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"

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

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