Average Error: 0.0 → 0.0
Time: 12.3s
Precision: 64
\[\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t\]
\[\mathsf{fma}\left(\frac{x}{8.0}, 1.0, t - \frac{z \cdot y}{2.0}\right)\]
\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t
\mathsf{fma}\left(\frac{x}{8.0}, 1.0, t - \frac{z \cdot y}{2.0}\right)
double f(double x, double y, double z, double t) {
        double r33369430 = 1.0;
        double r33369431 = 8.0;
        double r33369432 = r33369430 / r33369431;
        double r33369433 = x;
        double r33369434 = r33369432 * r33369433;
        double r33369435 = y;
        double r33369436 = z;
        double r33369437 = r33369435 * r33369436;
        double r33369438 = 2.0;
        double r33369439 = r33369437 / r33369438;
        double r33369440 = r33369434 - r33369439;
        double r33369441 = t;
        double r33369442 = r33369440 + r33369441;
        return r33369442;
}

double f(double x, double y, double z, double t) {
        double r33369443 = x;
        double r33369444 = 8.0;
        double r33369445 = r33369443 / r33369444;
        double r33369446 = 1.0;
        double r33369447 = t;
        double r33369448 = z;
        double r33369449 = y;
        double r33369450 = r33369448 * r33369449;
        double r33369451 = 2.0;
        double r33369452 = r33369450 / r33369451;
        double r33369453 = r33369447 - r33369452;
        double r33369454 = fma(r33369445, r33369446, r33369453);
        return r33369454;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original0.0
Target0.0
Herbie0.0
\[\left(\frac{x}{8.0} + t\right) - \frac{z}{2.0} \cdot y\]

Derivation

  1. Initial program 0.0

    \[\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x}{8.0}, 1.0, t - \frac{z \cdot y}{2.0}\right)}\]
  3. Final simplification0.0

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

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, B"

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

  (+ (- (* (/ 1.0 8.0) x) (/ (* y z) 2.0)) t))