Average Error: 58.6 → 0.6
Time: 10.6s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(2, -\frac{{x}^{2}}{{1}^{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(2, -\frac{{x}^{2}}{{1}^{2}}, \mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right), \log 1\right)\right)
double f(double x) {
        double r80129 = 1.0;
        double r80130 = 2.0;
        double r80131 = r80129 / r80130;
        double r80132 = x;
        double r80133 = r80129 + r80132;
        double r80134 = r80129 - r80132;
        double r80135 = r80133 / r80134;
        double r80136 = log(r80135);
        double r80137 = r80131 * r80136;
        return r80137;
}

double f(double x) {
        double r80138 = 1.0;
        double r80139 = 2.0;
        double r80140 = r80138 / r80139;
        double r80141 = x;
        double r80142 = 2.0;
        double r80143 = pow(r80141, r80142);
        double r80144 = pow(r80138, r80142);
        double r80145 = r80143 / r80144;
        double r80146 = -r80145;
        double r80147 = fma(r80141, r80141, r80141);
        double r80148 = log(r80138);
        double r80149 = fma(r80139, r80147, r80148);
        double r80150 = fma(r80139, r80146, r80149);
        double r80151 = r80140 * r80150;
        return r80151;
}

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(2, -\frac{{x}^{2}}{{1}^{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(2, -\frac{{x}^{2}}{{1}^{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)))))