Average Error: 58.6 → 0.6
Time: 9.0s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(-\frac{{x}^{2}}{{1}^{2}}, 2, \mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right), \log 1\right)\right)\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\frac{1}{2} \cdot \mathsf{fma}\left(-\frac{{x}^{2}}{{1}^{2}}, 2, \mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right), \log 1\right)\right)
double f(double x) {
        double r85123 = 1.0;
        double r85124 = 2.0;
        double r85125 = r85123 / r85124;
        double r85126 = x;
        double r85127 = r85123 + r85126;
        double r85128 = r85123 - r85126;
        double r85129 = r85127 / r85128;
        double r85130 = log(r85129);
        double r85131 = r85125 * r85130;
        return r85131;
}

double f(double x) {
        double r85132 = 1.0;
        double r85133 = 2.0;
        double r85134 = r85132 / r85133;
        double r85135 = x;
        double r85136 = 2.0;
        double r85137 = pow(r85135, r85136);
        double r85138 = pow(r85132, r85136);
        double r85139 = r85137 / r85138;
        double r85140 = -r85139;
        double r85141 = fma(r85135, r85135, r85135);
        double r85142 = log(r85132);
        double r85143 = fma(r85133, r85141, r85142);
        double r85144 = fma(r85140, r85133, r85143);
        double r85145 = r85134 * r85144;
        return r85145;
}

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(2 \cdot {x}^{2} + \left(2 \cdot x + \log 1\right)\right) - 2 \cdot \frac{{x}^{2}}{{1}^{2}}\right)}\]
  3. Simplified0.6

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

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

Reproduce

herbie shell --seed 2020045 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arc-(co)tangent"
  :precision binary64
  (* (/ 1 2) (log (/ (+ 1 x) (- 1 x)))))