Average Error: 0.0 → 0.0
Time: 3.3s
Precision: 64
\[\frac{2}{e^{x} + e^{-x}}\]
\[\frac{2}{\mathsf{fma}\left(\sqrt{e^{x}}, \sqrt{e^{x}}, e^{-x}\right)}\]
\frac{2}{e^{x} + e^{-x}}
\frac{2}{\mathsf{fma}\left(\sqrt{e^{x}}, \sqrt{e^{x}}, e^{-x}\right)}
double f(double x) {
        double r2168856 = 2.0;
        double r2168857 = x;
        double r2168858 = exp(r2168857);
        double r2168859 = -r2168857;
        double r2168860 = exp(r2168859);
        double r2168861 = r2168858 + r2168860;
        double r2168862 = r2168856 / r2168861;
        return r2168862;
}

double f(double x) {
        double r2168863 = 2.0;
        double r2168864 = x;
        double r2168865 = exp(r2168864);
        double r2168866 = sqrt(r2168865);
        double r2168867 = -r2168864;
        double r2168868 = exp(r2168867);
        double r2168869 = fma(r2168866, r2168866, r2168868);
        double r2168870 = r2168863 / r2168869;
        return r2168870;
}

Error

Bits error versus x

Derivation

  1. Initial program 0.0

    \[\frac{2}{e^{x} + e^{-x}}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt0.0

    \[\leadsto \frac{2}{\color{blue}{\sqrt{e^{x}} \cdot \sqrt{e^{x}}} + e^{-x}}\]
  4. Applied fma-def0.0

    \[\leadsto \frac{2}{\color{blue}{\mathsf{fma}\left(\sqrt{e^{x}}, \sqrt{e^{x}}, e^{-x}\right)}}\]
  5. Final simplification0.0

    \[\leadsto \frac{2}{\mathsf{fma}\left(\sqrt{e^{x}}, \sqrt{e^{x}}, e^{-x}\right)}\]

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic secant"
  (/ 2.0 (+ (exp x) (exp (- x)))))