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

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

\end{array}
double f(double x) {
        double r7853406 = x;
        double r7853407 = exp(r7853406);
        double r7853408 = -r7853406;
        double r7853409 = exp(r7853408);
        double r7853410 = r7853407 - r7853409;
        double r7853411 = 2.0;
        double r7853412 = r7853410 / r7853411;
        return r7853412;
}

double f(double x) {
        double r7853413 = x;
        double r7853414 = -0.014551332296984472;
        bool r7853415 = r7853413 <= r7853414;
        double r7853416 = exp(r7853413);
        double r7853417 = 3.0;
        double r7853418 = pow(r7853416, r7853417);
        double r7853419 = -r7853413;
        double r7853420 = exp(r7853419);
        double r7853421 = pow(r7853420, r7853417);
        double r7853422 = r7853418 - r7853421;
        double r7853423 = r7853416 * r7853420;
        double r7853424 = r7853420 * r7853420;
        double r7853425 = r7853423 + r7853424;
        double r7853426 = r7853416 * r7853416;
        double r7853427 = r7853425 + r7853426;
        double r7853428 = r7853422 / r7853427;
        double r7853429 = 2.0;
        double r7853430 = r7853428 / r7853429;
        double r7853431 = 0.016666666666666666;
        double r7853432 = 5.0;
        double r7853433 = pow(r7853413, r7853432);
        double r7853434 = r7853413 * r7853429;
        double r7853435 = 0.3333333333333333;
        double r7853436 = r7853413 * r7853413;
        double r7853437 = r7853435 * r7853436;
        double r7853438 = r7853437 * r7853413;
        double r7853439 = r7853434 + r7853438;
        double r7853440 = fma(r7853431, r7853433, r7853439);
        double r7853441 = log1p(r7853440);
        double r7853442 = expm1(r7853441);
        double r7853443 = r7853442 / r7853429;
        double r7853444 = r7853415 ? r7853430 : r7853443;
        return r7853444;
}

Error

Bits error versus x

Derivation

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

    1. Initial program 0.4

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

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

    if -0.014551332296984472 < x

    1. Initial program 58.5

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\frac{1}{60}, \left({x}^{5}\right), \left(x \cdot \mathsf{fma}\left(\frac{1}{3}, \left(x \cdot x\right), 2\right)\right)\right)}}{2}\]
    4. Using strategy rm
    5. Applied fma-udef0.3

      \[\leadsto \frac{\mathsf{fma}\left(\frac{1}{60}, \left({x}^{5}\right), \left(x \cdot \color{blue}{\left(\frac{1}{3} \cdot \left(x \cdot x\right) + 2\right)}\right)\right)}{2}\]
    6. Applied distribute-lft-in0.2

      \[\leadsto \frac{\mathsf{fma}\left(\frac{1}{60}, \left({x}^{5}\right), \color{blue}{\left(x \cdot \left(\frac{1}{3} \cdot \left(x \cdot x\right)\right) + x \cdot 2\right)}\right)}{2}\]
    7. Using strategy rm
    8. Applied expm1-log1p-u0.2

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

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

Reproduce

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