Average Error: 58.6 → 0.3
Time: 26.8s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\mathsf{fma}\left(\frac{x}{1} \cdot \frac{x}{1}, \frac{2}{3} \cdot \frac{x}{1}, \mathsf{fma}\left(\frac{{x}^{5}}{{1}^{5}}, \frac{2}{5}, x \cdot 2\right)\right) \cdot \frac{1}{2}\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\mathsf{fma}\left(\frac{x}{1} \cdot \frac{x}{1}, \frac{2}{3} \cdot \frac{x}{1}, \mathsf{fma}\left(\frac{{x}^{5}}{{1}^{5}}, \frac{2}{5}, x \cdot 2\right)\right) \cdot \frac{1}{2}
double f(double x) {
        double r2454652 = 1.0;
        double r2454653 = 2.0;
        double r2454654 = r2454652 / r2454653;
        double r2454655 = x;
        double r2454656 = r2454652 + r2454655;
        double r2454657 = r2454652 - r2454655;
        double r2454658 = r2454656 / r2454657;
        double r2454659 = log(r2454658);
        double r2454660 = r2454654 * r2454659;
        return r2454660;
}

double f(double x) {
        double r2454661 = x;
        double r2454662 = 1.0;
        double r2454663 = r2454661 / r2454662;
        double r2454664 = r2454663 * r2454663;
        double r2454665 = 0.6666666666666666;
        double r2454666 = r2454665 * r2454663;
        double r2454667 = 5.0;
        double r2454668 = pow(r2454661, r2454667);
        double r2454669 = pow(r2454662, r2454667);
        double r2454670 = r2454668 / r2454669;
        double r2454671 = 0.4;
        double r2454672 = 2.0;
        double r2454673 = r2454661 * r2454672;
        double r2454674 = fma(r2454670, r2454671, r2454673);
        double r2454675 = fma(r2454664, r2454666, r2454674);
        double r2454676 = r2454662 / r2454672;
        double r2454677 = r2454675 * r2454676;
        return r2454677;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.6

    \[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
  2. Using strategy rm
  3. Applied log-div58.6

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

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

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

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

Reproduce

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