Average Error: 58.6 → 0.6
Time: 19.0s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right) - \frac{x}{1} \cdot \frac{x}{1}, \log 1\right)\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\frac{1}{2} \cdot \mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right) - \frac{x}{1} \cdot \frac{x}{1}, \log 1\right)
double f(double x) {
        double r2723443 = 1.0;
        double r2723444 = 2.0;
        double r2723445 = r2723443 / r2723444;
        double r2723446 = x;
        double r2723447 = r2723443 + r2723446;
        double r2723448 = r2723443 - r2723446;
        double r2723449 = r2723447 / r2723448;
        double r2723450 = log(r2723449);
        double r2723451 = r2723445 * r2723450;
        return r2723451;
}

double f(double x) {
        double r2723452 = 1.0;
        double r2723453 = 2.0;
        double r2723454 = r2723452 / r2723453;
        double r2723455 = x;
        double r2723456 = fma(r2723455, r2723455, r2723455);
        double r2723457 = r2723455 / r2723452;
        double r2723458 = r2723457 * r2723457;
        double r2723459 = r2723456 - r2723458;
        double r2723460 = log(r2723452);
        double r2723461 = fma(r2723453, r2723459, r2723460);
        double r2723462 = r2723454 * r2723461;
        return r2723462;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.6

    \[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
  2. Taylor expanded around 0 0.6

    \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(\log 1 + \left(2 \cdot {x}^{2} + 2 \cdot x\right)\right) - 2 \cdot \frac{{x}^{2}}{{1}^{2}}\right)}\]
  3. Simplified0.6

    \[\leadsto \frac{1}{2} \cdot \color{blue}{\mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right) - \frac{x}{1} \cdot \frac{x}{1}, \log 1\right)}\]
  4. Final simplification0.6

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

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arc-(co)tangent"
  (* (/ 1.0 2.0) (log (/ (+ 1.0 x) (- 1.0 x)))))