Average Error: 58.2 → 1.9
Time: 33.2s
Precision: 64
\[\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}\]
\[\mathsf{fma}\left(x \cdot \left(x \cdot x\right), \frac{-1}{3}, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)\]
\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}
\mathsf{fma}\left(x \cdot \left(x \cdot x\right), \frac{-1}{3}, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)
double f(double x) {
        double r2191019 = x;
        double r2191020 = exp(r2191019);
        double r2191021 = -r2191019;
        double r2191022 = exp(r2191021);
        double r2191023 = r2191020 - r2191022;
        double r2191024 = r2191020 + r2191022;
        double r2191025 = r2191023 / r2191024;
        return r2191025;
}

double f(double x) {
        double r2191026 = x;
        double r2191027 = r2191026 * r2191026;
        double r2191028 = r2191026 * r2191027;
        double r2191029 = -0.3333333333333333;
        double r2191030 = 5.0;
        double r2191031 = pow(r2191026, r2191030);
        double r2191032 = 0.13333333333333333;
        double r2191033 = fma(r2191031, r2191032, r2191026);
        double r2191034 = fma(r2191028, r2191029, r2191033);
        return r2191034;
}

Error

Bits error versus x

Derivation

  1. Initial program 58.2

    \[\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}\]
  2. Taylor expanded around 0 1.9

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

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

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

Reproduce

herbie shell --seed 2019152 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic tangent"
  (/ (- (exp x) (exp (- x))) (+ (exp x) (exp (- x)))))