Average Error: 0.0 → 0.0
Time: 11.9s
Precision: 64
\[\left(\frac{1}{8} \cdot x - \frac{y \cdot z}{2}\right) + t\]
\[\mathsf{fma}\left(\frac{1}{8}, x, t - \frac{y \cdot z}{2}\right)\]
\left(\frac{1}{8} \cdot x - \frac{y \cdot z}{2}\right) + t
\mathsf{fma}\left(\frac{1}{8}, x, t - \frac{y \cdot z}{2}\right)
double f(double x, double y, double z, double t) {
        double r45745080 = 1.0;
        double r45745081 = 8.0;
        double r45745082 = r45745080 / r45745081;
        double r45745083 = x;
        double r45745084 = r45745082 * r45745083;
        double r45745085 = y;
        double r45745086 = z;
        double r45745087 = r45745085 * r45745086;
        double r45745088 = 2.0;
        double r45745089 = r45745087 / r45745088;
        double r45745090 = r45745084 - r45745089;
        double r45745091 = t;
        double r45745092 = r45745090 + r45745091;
        return r45745092;
}

double f(double x, double y, double z, double t) {
        double r45745093 = 1.0;
        double r45745094 = 8.0;
        double r45745095 = r45745093 / r45745094;
        double r45745096 = x;
        double r45745097 = t;
        double r45745098 = y;
        double r45745099 = z;
        double r45745100 = r45745098 * r45745099;
        double r45745101 = 2.0;
        double r45745102 = r45745100 / r45745101;
        double r45745103 = r45745097 - r45745102;
        double r45745104 = fma(r45745095, r45745096, r45745103);
        return r45745104;
}

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{1}{8}, x, t - \frac{y \cdot z}{2}\right)}\]
  3. Final simplification0.0

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

Reproduce

herbie shell --seed 2019174 +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))