\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 r40912 = x;
double r40913 = exp(r40912);
double r40914 = -r40912;
double r40915 = exp(r40914);
double r40916 = r40913 - r40915;
double r40917 = 2.0;
double r40918 = r40916 / r40917;
return r40918;
}
double f(double x) {
double r40919 = x;
double r40920 = -0.012882299779342181;
bool r40921 = r40919 <= r40920;
double r40922 = exp(r40919);
double r40923 = 2.0;
double r40924 = pow(r40922, r40923);
double r40925 = -2.0;
double r40926 = exp(r40925);
double r40927 = pow(r40926, r40919);
double r40928 = r40924 - r40927;
double r40929 = r40928 / r40928;
double r40930 = -r40919;
double r40931 = exp(r40930);
double r40932 = r40922 - r40931;
double r40933 = r40929 * r40932;
double r40934 = 2.0;
double r40935 = r40933 / r40934;
double r40936 = 0.3333333333333333;
double r40937 = 3.0;
double r40938 = pow(r40919, r40937);
double r40939 = 0.016666666666666666;
double r40940 = 5.0;
double r40941 = pow(r40919, r40940);
double r40942 = r40923 * r40919;
double r40943 = fma(r40939, r40941, r40942);
double r40944 = fma(r40936, r40938, r40943);
double r40945 = r40944 / r40934;
double r40946 = r40921 ? r40935 : r40945;
return r40946;
}



Bits error versus x
if x < -0.012882299779342181Initial program 0.8
rmApplied flip--5.2
Simplified5.1
rmApplied flip-+5.1
Applied associate-/r/5.1
Simplified5.2
if -0.012882299779342181 < x Initial program 58.6
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x)
:name "Hyperbolic sine"
:precision binary64
(/ (- (exp x) (exp (- x))) 2))