Average Error: 58.4 → 0.7
Time: 6.7s
Precision: 64
\[\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)\]
\[\frac{1}{2} \cdot \mathsf{fma}\left(\mathsf{fma}\left(x, x, x\right), 2, \log 1 - 2 \cdot \frac{{x}^{2}}{{1}^{2}}\right)\]
\frac{1}{2} \cdot \log \left(\frac{1 + x}{1 - x}\right)
\frac{1}{2} \cdot \mathsf{fma}\left(\mathsf{fma}\left(x, x, x\right), 2, \log 1 - 2 \cdot \frac{{x}^{2}}{{1}^{2}}\right)
double f(double x) {
        double r98494 = 1.0;
        double r98495 = 2.0;
        double r98496 = r98494 / r98495;
        double r98497 = x;
        double r98498 = r98494 + r98497;
        double r98499 = r98494 - r98497;
        double r98500 = r98498 / r98499;
        double r98501 = log(r98500);
        double r98502 = r98496 * r98501;
        return r98502;
}

double f(double x) {
        double r98503 = 1.0;
        double r98504 = 2.0;
        double r98505 = r98503 / r98504;
        double r98506 = x;
        double r98507 = fma(r98506, r98506, r98506);
        double r98508 = log(r98503);
        double r98509 = 2.0;
        double r98510 = pow(r98506, r98509);
        double r98511 = pow(r98503, r98509);
        double r98512 = r98510 / r98511;
        double r98513 = r98504 * r98512;
        double r98514 = r98508 - r98513;
        double r98515 = fma(r98507, r98504, r98514);
        double r98516 = r98505 * r98515;
        return r98516;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.4

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

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

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

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

Reproduce

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