Average Error: 58.6 → 0.6
Time: 12.4s
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 r94105 = 1.0;
        double r94106 = 2.0;
        double r94107 = r94105 / r94106;
        double r94108 = x;
        double r94109 = r94105 + r94108;
        double r94110 = r94105 - r94108;
        double r94111 = r94109 / r94110;
        double r94112 = log(r94111);
        double r94113 = r94107 * r94112;
        return r94113;
}

double f(double x) {
        double r94114 = 1.0;
        double r94115 = 2.0;
        double r94116 = r94114 / r94115;
        double r94117 = x;
        double r94118 = 2.0;
        double r94119 = pow(r94117, r94118);
        double r94120 = pow(r94114, r94118);
        double r94121 = r94119 / r94120;
        double r94122 = -r94121;
        double r94123 = fma(r94117, r94117, r94117);
        double r94124 = log(r94114);
        double r94125 = fma(r94115, r94123, r94124);
        double r94126 = fma(r94122, r94115, r94125);
        double r94127 = r94116 * r94126;
        return r94127;
}

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 2020042 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arc-(co)tangent"
  :precision binary64
  (* (/ 1 2) (log (/ (+ 1 x) (- 1 x)))))