Average Error: 58.1 → 0.3
Time: 20.1s
Precision: 64
\[\frac{e^{x} - e^{-x}}{2}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.01288229977934218090096507580710749607533:\\ \;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}}{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}} \cdot \left(e^{x} - e^{-x}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{3}, {x}^{3}, \mathsf{fma}\left(\frac{1}{60}, {x}^{5}, 2 \cdot x\right)\right)}{2}\\ \end{array}\]
\frac{e^{x} - e^{-x}}{2}
\begin{array}{l}
\mathbf{if}\;x \le -0.01288229977934218090096507580710749607533:\\
\;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}}{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}} \cdot \left(e^{x} - e^{-x}\right)}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{3}, {x}^{3}, \mathsf{fma}\left(\frac{1}{60}, {x}^{5}, 2 \cdot x\right)\right)}{2}\\

\end{array}
double f(double x) {
        double r55079 = x;
        double r55080 = exp(r55079);
        double r55081 = -r55079;
        double r55082 = exp(r55081);
        double r55083 = r55080 - r55082;
        double r55084 = 2.0;
        double r55085 = r55083 / r55084;
        return r55085;
}

double f(double x) {
        double r55086 = x;
        double r55087 = -0.012882299779342181;
        bool r55088 = r55086 <= r55087;
        double r55089 = exp(r55086);
        double r55090 = 2.0;
        double r55091 = pow(r55089, r55090);
        double r55092 = -2.0;
        double r55093 = exp(r55092);
        double r55094 = pow(r55093, r55086);
        double r55095 = r55091 - r55094;
        double r55096 = r55095 / r55095;
        double r55097 = -r55086;
        double r55098 = exp(r55097);
        double r55099 = r55089 - r55098;
        double r55100 = r55096 * r55099;
        double r55101 = 2.0;
        double r55102 = r55100 / r55101;
        double r55103 = 0.3333333333333333;
        double r55104 = 3.0;
        double r55105 = pow(r55086, r55104);
        double r55106 = 0.016666666666666666;
        double r55107 = 5.0;
        double r55108 = pow(r55086, r55107);
        double r55109 = r55090 * r55086;
        double r55110 = fma(r55106, r55108, r55109);
        double r55111 = fma(r55103, r55105, r55110);
        double r55112 = r55111 / r55101;
        double r55113 = r55088 ? r55102 : r55112;
        return r55113;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.012882299779342181

    1. Initial program 0.8

      \[\frac{e^{x} - e^{-x}}{2}\]
    2. Using strategy rm
    3. Applied flip--5.2

      \[\leadsto \frac{\color{blue}{\frac{e^{x} \cdot e^{x} - e^{-x} \cdot e^{-x}}{e^{x} + e^{-x}}}}{2}\]
    4. Simplified5.1

      \[\leadsto \frac{\frac{\color{blue}{e^{x + x} - e^{x \cdot -2}}}{e^{x} + e^{-x}}}{2}\]
    5. Using strategy rm
    6. Applied flip-+5.1

      \[\leadsto \frac{\frac{e^{x + x} - e^{x \cdot -2}}{\color{blue}{\frac{e^{x} \cdot e^{x} - e^{-x} \cdot e^{-x}}{e^{x} - e^{-x}}}}}{2}\]
    7. Applied associate-/r/5.1

      \[\leadsto \frac{\color{blue}{\frac{e^{x + x} - e^{x \cdot -2}}{e^{x} \cdot e^{x} - e^{-x} \cdot e^{-x}} \cdot \left(e^{x} - e^{-x}\right)}}{2}\]
    8. Simplified5.2

      \[\leadsto \frac{\color{blue}{\frac{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}}{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}}} \cdot \left(e^{x} - e^{-x}\right)}{2}\]

    if -0.012882299779342181 < x

    1. Initial program 58.6

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\frac{1}{3}, {x}^{3}, \mathsf{fma}\left(\frac{1}{60}, {x}^{5}, 2 \cdot x\right)\right)}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.01288229977934218090096507580710749607533:\\ \;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}}{{\left(e^{x}\right)}^{2} - {\left(e^{-2}\right)}^{x}} \cdot \left(e^{x} - e^{-x}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{3}, {x}^{3}, \mathsf{fma}\left(\frac{1}{60}, {x}^{5}, 2 \cdot x\right)\right)}{2}\\ \end{array}\]

Reproduce

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