Average Error: 0.0 → 0.0
Time: 2.1s
Precision: 64
\[\left(\frac{1}{8} \cdot x - \frac{y \cdot z}{2}\right) + t\]
\[\mathsf{fma}\left(\frac{x}{8}, 1, \mathsf{fma}\left(-\frac{y}{2}, z, t\right)\right)\]
\left(\frac{1}{8} \cdot x - \frac{y \cdot z}{2}\right) + t
\mathsf{fma}\left(\frac{x}{8}, 1, \mathsf{fma}\left(-\frac{y}{2}, z, t\right)\right)
double f(double x, double y, double z, double t) {
        double r780415 = 1.0;
        double r780416 = 8.0;
        double r780417 = r780415 / r780416;
        double r780418 = x;
        double r780419 = r780417 * r780418;
        double r780420 = y;
        double r780421 = z;
        double r780422 = r780420 * r780421;
        double r780423 = 2.0;
        double r780424 = r780422 / r780423;
        double r780425 = r780419 - r780424;
        double r780426 = t;
        double r780427 = r780425 + r780426;
        return r780427;
}

double f(double x, double y, double z, double t) {
        double r780428 = x;
        double r780429 = 8.0;
        double r780430 = r780428 / r780429;
        double r780431 = 1.0;
        double r780432 = y;
        double r780433 = 2.0;
        double r780434 = r780432 / r780433;
        double r780435 = -r780434;
        double r780436 = z;
        double r780437 = t;
        double r780438 = fma(r780435, r780436, r780437);
        double r780439 = fma(r780430, r780431, r780438);
        return r780439;
}

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} + t\right) - \frac{z}{2} \cdot y\]

Derivation

  1. Initial program 0.0

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

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

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

Reproduce

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

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

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