Average Error: 58.5 → 0.2
Time: 15.1s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(x, 2, \mathsf{fma}\left({\left(\frac{x}{1}\right)}^{3}, \frac{2}{3}, \frac{2}{5} \cdot \frac{{x}^{5}}{{1}^{5}}\right)\right)\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\frac{1}{2} \cdot \mathsf{fma}\left(x, 2, \mathsf{fma}\left({\left(\frac{x}{1}\right)}^{3}, \frac{2}{3}, \frac{2}{5} \cdot \frac{{x}^{5}}{{1}^{5}}\right)\right)
double f(double x) {
        double r64726 = 1.0;
        double r64727 = 2.0;
        double r64728 = r64726 / r64727;
        double r64729 = x;
        double r64730 = r64726 + r64729;
        double r64731 = r64726 - r64729;
        double r64732 = r64730 / r64731;
        double r64733 = log(r64732);
        double r64734 = r64728 * r64733;
        return r64734;
}

double f(double x) {
        double r64735 = 1.0;
        double r64736 = 2.0;
        double r64737 = r64735 / r64736;
        double r64738 = x;
        double r64739 = r64738 / r64735;
        double r64740 = 3.0;
        double r64741 = pow(r64739, r64740);
        double r64742 = 0.6666666666666666;
        double r64743 = 0.4;
        double r64744 = 5.0;
        double r64745 = pow(r64738, r64744);
        double r64746 = pow(r64735, r64744);
        double r64747 = r64745 / r64746;
        double r64748 = r64743 * r64747;
        double r64749 = fma(r64741, r64742, r64748);
        double r64750 = fma(r64738, r64736, r64749);
        double r64751 = r64737 * r64750;
        return r64751;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.5

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

    \[\leadsto \frac{1}{2} \cdot \log \left(\frac{1 + x}{\color{blue}{\frac{1 \cdot 1 - x \cdot x}{1 + x}}}\right)\]
  4. Applied associate-/r/58.5

    \[\leadsto \frac{1}{2} \cdot \log \color{blue}{\left(\frac{1 + x}{1 \cdot 1 - x \cdot x} \cdot \left(1 + x\right)\right)}\]
  5. Applied log-prod58.5

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

    \[\leadsto \frac{1}{2} \cdot \left(\color{blue}{\left(-\log \left(1 - x\right)\right)} + \log \left(1 + x\right)\right)\]
  7. 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)}\]
  8. Simplified0.2

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

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

Reproduce

herbie shell --seed 2019304 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arc-(co)tangent"
  :precision binary64
  (* (/ 1 2) (log (/ (+ 1 x) (- 1 x)))))