Average Error: 58.4 → 0.2
Time: 24.5s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\mathsf{fma}\left(\frac{2}{5}, \frac{{x}^{5}}{{1}^{5}}, \mathsf{fma}\left(\frac{x}{1} \cdot \left(\frac{x}{1} \cdot \frac{x}{1}\right), \frac{2}{3}, 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{2}{5}, \frac{{x}^{5}}{{1}^{5}}, \mathsf{fma}\left(\frac{x}{1} \cdot \left(\frac{x}{1} \cdot \frac{x}{1}\right), \frac{2}{3}, x \cdot 2\right)\right) \cdot \frac{1}{2}
double f(double x) {
        double r3632604 = 1.0;
        double r3632605 = 2.0;
        double r3632606 = r3632604 / r3632605;
        double r3632607 = x;
        double r3632608 = r3632604 + r3632607;
        double r3632609 = r3632604 - r3632607;
        double r3632610 = r3632608 / r3632609;
        double r3632611 = log(r3632610);
        double r3632612 = r3632606 * r3632611;
        return r3632612;
}

double f(double x) {
        double r3632613 = 0.4;
        double r3632614 = x;
        double r3632615 = 5.0;
        double r3632616 = pow(r3632614, r3632615);
        double r3632617 = 1.0;
        double r3632618 = pow(r3632617, r3632615);
        double r3632619 = r3632616 / r3632618;
        double r3632620 = r3632614 / r3632617;
        double r3632621 = r3632620 * r3632620;
        double r3632622 = r3632620 * r3632621;
        double r3632623 = 0.6666666666666666;
        double r3632624 = 2.0;
        double r3632625 = r3632614 * r3632624;
        double r3632626 = fma(r3632622, r3632623, r3632625);
        double r3632627 = fma(r3632613, r3632619, r3632626);
        double r3632628 = r3632617 / r3632624;
        double r3632629 = r3632627 * r3632628;
        return r3632629;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.4

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

    \[\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.2

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

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

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

Reproduce

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