Average Error: 0.0 → 0.0
Time: 815.0ms
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 r823826 = 1.0;
        double r823827 = 8.0;
        double r823828 = r823826 / r823827;
        double r823829 = x;
        double r823830 = r823828 * r823829;
        double r823831 = y;
        double r823832 = z;
        double r823833 = r823831 * r823832;
        double r823834 = 2.0;
        double r823835 = r823833 / r823834;
        double r823836 = r823830 - r823835;
        double r823837 = t;
        double r823838 = r823836 + r823837;
        return r823838;
}

double f(double x, double y, double z, double t) {
        double r823839 = x;
        double r823840 = 8.0;
        double r823841 = r823839 / r823840;
        double r823842 = 1.0;
        double r823843 = y;
        double r823844 = 2.0;
        double r823845 = r823843 / r823844;
        double r823846 = -r823845;
        double r823847 = z;
        double r823848 = t;
        double r823849 = fma(r823846, r823847, r823848);
        double r823850 = fma(r823841, r823842, r823849);
        return r823850;
}

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