Average Error: 0.0 → 0.0
Time: 1.5s
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 r703463 = 1.0;
        double r703464 = 8.0;
        double r703465 = r703463 / r703464;
        double r703466 = x;
        double r703467 = r703465 * r703466;
        double r703468 = y;
        double r703469 = z;
        double r703470 = r703468 * r703469;
        double r703471 = 2.0;
        double r703472 = r703470 / r703471;
        double r703473 = r703467 - r703472;
        double r703474 = t;
        double r703475 = r703473 + r703474;
        return r703475;
}

double f(double x, double y, double z, double t) {
        double r703476 = x;
        double r703477 = 8.0;
        double r703478 = r703476 / r703477;
        double r703479 = 1.0;
        double r703480 = y;
        double r703481 = 2.0;
        double r703482 = r703480 / r703481;
        double r703483 = -r703482;
        double r703484 = z;
        double r703485 = t;
        double r703486 = fma(r703483, r703484, r703485);
        double r703487 = fma(r703478, r703479, r703486);
        return r703487;
}

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 2020033 +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))