Average Error: 0.0 → 0.0
Time: 11.3s
Precision: 64
\[x - \frac{y}{1 + \frac{x \cdot y}{2}}\]
\[x - \frac{y}{\mathsf{fma}\left(x, \frac{y}{2}, 1\right)}\]
x - \frac{y}{1 + \frac{x \cdot y}{2}}
x - \frac{y}{\mathsf{fma}\left(x, \frac{y}{2}, 1\right)}
double f(double x, double y) {
        double r8287229 = x;
        double r8287230 = y;
        double r8287231 = 1.0;
        double r8287232 = r8287229 * r8287230;
        double r8287233 = 2.0;
        double r8287234 = r8287232 / r8287233;
        double r8287235 = r8287231 + r8287234;
        double r8287236 = r8287230 / r8287235;
        double r8287237 = r8287229 - r8287236;
        return r8287237;
}

double f(double x, double y) {
        double r8287238 = x;
        double r8287239 = y;
        double r8287240 = 2.0;
        double r8287241 = r8287239 / r8287240;
        double r8287242 = 1.0;
        double r8287243 = fma(r8287238, r8287241, r8287242);
        double r8287244 = r8287239 / r8287243;
        double r8287245 = r8287238 - r8287244;
        return r8287245;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Initial program 0.0

    \[x - \frac{y}{1 + \frac{x \cdot y}{2}}\]
  2. Simplified0.0

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

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

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (x y)
  :name "Data.Number.Erf:$cinvnormcdf from erf-2.0.0.0, B"
  (- x (/ y (+ 1.0 (/ (* x y) 2.0)))))