Average Error: 58.4 → 0.3
Time: 6.8s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(\frac{2}{3}, \frac{{x}^{3}}{{1}^{3}}, \mathsf{fma}\left(2, x, \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(\frac{2}{3}, \frac{{x}^{3}}{{1}^{3}}, \mathsf{fma}\left(2, x, \frac{2}{5} \cdot \frac{{x}^{5}}{{1}^{5}}\right)\right)
double f(double x) {
        double r60453 = 1.0;
        double r60454 = 2.0;
        double r60455 = r60453 / r60454;
        double r60456 = x;
        double r60457 = r60453 + r60456;
        double r60458 = r60453 - r60456;
        double r60459 = r60457 / r60458;
        double r60460 = log(r60459);
        double r60461 = r60455 * r60460;
        return r60461;
}

double f(double x) {
        double r60462 = 1.0;
        double r60463 = 2.0;
        double r60464 = r60462 / r60463;
        double r60465 = 0.6666666666666666;
        double r60466 = x;
        double r60467 = 3.0;
        double r60468 = pow(r60466, r60467);
        double r60469 = pow(r60462, r60467);
        double r60470 = r60468 / r60469;
        double r60471 = 0.4;
        double r60472 = 5.0;
        double r60473 = pow(r60466, r60472);
        double r60474 = pow(r60462, r60472);
        double r60475 = r60473 / r60474;
        double r60476 = r60471 * r60475;
        double r60477 = fma(r60463, r60466, r60476);
        double r60478 = fma(r60465, r60470, r60477);
        double r60479 = r60464 * r60478;
        return r60479;
}

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.3

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

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

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

Reproduce

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