Average Error: 0.0 → 0.0
Time: 1.9s
Precision: 64
\[\left(\frac{x}{2} + y \cdot x\right) + z\]
\[\mathsf{fma}\left(x, y, z\right) + \frac{x}{2}\]
\left(\frac{x}{2} + y \cdot x\right) + z
\mathsf{fma}\left(x, y, z\right) + \frac{x}{2}
double f(double x, double y, double z) {
        double r214295 = x;
        double r214296 = 2.0;
        double r214297 = r214295 / r214296;
        double r214298 = y;
        double r214299 = r214298 * r214295;
        double r214300 = r214297 + r214299;
        double r214301 = z;
        double r214302 = r214300 + r214301;
        return r214302;
}

double f(double x, double y, double z) {
        double r214303 = x;
        double r214304 = y;
        double r214305 = z;
        double r214306 = fma(r214303, r214304, r214305);
        double r214307 = 2.0;
        double r214308 = r214303 / r214307;
        double r214309 = r214306 + r214308;
        return r214309;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.0

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

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

    \[\leadsto \mathsf{fma}\left(x, y, z\right) + \frac{x}{2}\]

Reproduce

herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z)
  :name "Data.Histogram.Bin.BinF:$cfromIndex from histogram-fill-0.8.4.1"
  :precision binary64
  (+ (+ (/ x 2) (* y x)) z))