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

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

\end{array}
double f(double x) {
        double r39433 = x;
        double r39434 = exp(r39433);
        double r39435 = -r39433;
        double r39436 = exp(r39435);
        double r39437 = r39434 - r39436;
        double r39438 = 2.0;
        double r39439 = r39437 / r39438;
        return r39439;
}

double f(double x) {
        double r39440 = x;
        double r39441 = -0.015600201493487556;
        bool r39442 = r39440 <= r39441;
        double r39443 = exp(r39440);
        double r39444 = -2.0;
        double r39445 = r39444 * r39440;
        double r39446 = exp(r39445);
        double r39447 = 1.0;
        double r39448 = r39446 + r39447;
        double r39449 = r39443 / r39448;
        double r39450 = -r39440;
        double r39451 = exp(r39450);
        double r39452 = 2.0;
        double r39453 = pow(r39443, r39452);
        double r39454 = r39453 + r39447;
        double r39455 = r39451 / r39454;
        double r39456 = r39449 - r39455;
        double r39457 = 2.0;
        double r39458 = r39456 / r39457;
        double r39459 = 0.3333333333333333;
        double r39460 = 3.0;
        double r39461 = pow(r39440, r39460);
        double r39462 = r39459 * r39461;
        double r39463 = 0.016666666666666666;
        double r39464 = 5.0;
        double r39465 = pow(r39440, r39464);
        double r39466 = r39463 * r39465;
        double r39467 = r39462 + r39466;
        double r39468 = r39452 * r39440;
        double r39469 = r39467 + r39468;
        double r39470 = r39469 / r39457;
        double r39471 = r39442 ? r39458 : r39470;
        return r39471;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

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

    1. Initial program 0.7

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

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

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

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

      \[\leadsto \frac{\color{blue}{\frac{e^{x}}{e^{-2 \cdot x} + 1}} - \frac{e^{x \cdot -2}}{e^{x} + e^{-x}}}{2}\]
    8. Simplified0.5

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

    if -0.015600201493487556 < x

    1. Initial program 58.5

      \[\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. Using strategy rm
    4. Applied associate-+r+0.3

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

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

Reproduce

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