Average Error: 0.0 → 0.0
Time: 2.4s
Precision: 64
\[\frac{2}{e^{x} + e^{-x}}\]
\[\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{2}{e^{x} + e^{-x}}\right)\right)\]
\frac{2}{e^{x} + e^{-x}}
\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{2}{e^{x} + e^{-x}}\right)\right)
double f(double x) {
        double r66772 = 2.0;
        double r66773 = x;
        double r66774 = exp(r66773);
        double r66775 = -r66773;
        double r66776 = exp(r66775);
        double r66777 = r66774 + r66776;
        double r66778 = r66772 / r66777;
        return r66778;
}

double f(double x) {
        double r66779 = 2.0;
        double r66780 = x;
        double r66781 = exp(r66780);
        double r66782 = -r66780;
        double r66783 = exp(r66782);
        double r66784 = r66781 + r66783;
        double r66785 = r66779 / r66784;
        double r66786 = expm1(r66785);
        double r66787 = log1p(r66786);
        return r66787;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

    \[\frac{2}{e^{x} + e^{-x}}\]
  2. Using strategy rm
  3. Applied log1p-expm1-u0.0

    \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{2}{e^{x} + e^{-x}}\right)\right)}\]
  4. Final simplification0.0

    \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{2}{e^{x} + e^{-x}}\right)\right)\]

Reproduce

herbie shell --seed 2019354 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic secant"
  :precision binary64
  (/ 2 (+ (exp x) (exp (- x)))))