Average Error: 58.6 → 0.7
Time: 16.4s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{\mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right) - \frac{x}{1} \cdot \frac{x}{1}, \log 1\right)}{\frac{2}{1}}\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\frac{\mathsf{fma}\left(2, \mathsf{fma}\left(x, x, x\right) - \frac{x}{1} \cdot \frac{x}{1}, \log 1\right)}{\frac{2}{1}}
double f(double x) {
        double r68624 = 1.0;
        double r68625 = 2.0;
        double r68626 = r68624 / r68625;
        double r68627 = x;
        double r68628 = r68624 + r68627;
        double r68629 = r68624 - r68627;
        double r68630 = r68628 / r68629;
        double r68631 = log(r68630);
        double r68632 = r68626 * r68631;
        return r68632;
}

double f(double x) {
        double r68633 = 2.0;
        double r68634 = x;
        double r68635 = fma(r68634, r68634, r68634);
        double r68636 = 1.0;
        double r68637 = r68634 / r68636;
        double r68638 = r68637 * r68637;
        double r68639 = r68635 - r68638;
        double r68640 = log(r68636);
        double r68641 = fma(r68633, r68639, r68640);
        double r68642 = r68633 / r68636;
        double r68643 = r68641 / r68642;
        return r68643;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.6

    \[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
  2. Simplified58.6

    \[\leadsto \color{blue}{\frac{\log \left(\frac{x + 1}{1 - x}\right)}{\frac{2}{1}}}\]
  3. Taylor expanded around 0 0.7

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

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

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

Reproduce

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