Average Error: 0.0 → 0.0
Time: 17.6s
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 r34240123 = 1.0;
        double r34240124 = 8.0;
        double r34240125 = r34240123 / r34240124;
        double r34240126 = x;
        double r34240127 = r34240125 * r34240126;
        double r34240128 = y;
        double r34240129 = z;
        double r34240130 = r34240128 * r34240129;
        double r34240131 = 2.0;
        double r34240132 = r34240130 / r34240131;
        double r34240133 = r34240127 - r34240132;
        double r34240134 = t;
        double r34240135 = r34240133 + r34240134;
        return r34240135;
}

double f(double x, double y, double z, double t) {
        double r34240136 = x;
        double r34240137 = 8.0;
        double r34240138 = r34240136 / r34240137;
        double r34240139 = 1.0;
        double r34240140 = t;
        double r34240141 = z;
        double r34240142 = y;
        double r34240143 = r34240141 * r34240142;
        double r34240144 = 2.0;
        double r34240145 = r34240143 / r34240144;
        double r34240146 = r34240140 - r34240145;
        double r34240147 = fma(r34240138, r34240139, r34240146);
        return r34240147;
}

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