function sinh( x ) {
	var a;
	if ( x === 0.0 ) {
		return x; // handles `+-0`
	}
	if ( x > POS_OVERFLOW || x < NEG_OVERFLOW ) {
		return ( x > 0.0 ) ? PINF : NINF;
	}
	a = abs( x );
	if ( a > 1.0 ) {
		if ( a >= LARGE ) {
			a = exp( 0.5*a );
			a *= 0.5 * a;
			if ( x < 0.0 ) {
				a = -a;
			}
			return a;
		}
		a = exp( a );
		a = (0.5*a) - (0.5/a);
		if ( x < 0.0 ) {
			a = -a;
		}
		return a;
	}
	a *= a;
	return x + ( x*a*rateval( a ) );
}
Computes the hyperbolic sine of a double-precision floating-point number.

## Method

The range is partitioned into two segments. If \\( |x| \le 1 \\), we use a rational function of the form

```tex
x + x^3 \frac{\mathrm{P}(x)}{\mathrm{Q}(x)}
```

Otherwise, the calculation is

```tex
\operatorname{sinh}(x) = \frac{ e^x - e^{-x} }{2}.
```

## Notes

-   Relative error:

    | arithmetic | domain   | # trials | peak    | rms     |
    |:----------:|:--------:|:--------:|:-------:|:-------:|
    | DEC        | +- 88    | 50000    | 4.0e-17 | 7.7e-18 |
    | IEEE       | +-MAXLOG | 30000    | 2.6e-16 | 5.7e-17 |

@param {number} x - input value
@returns {number} hyperbolic sine

@example
var v = sinh( 0.0 );
// returns 0.0

@example
var v = sinh( 2.0 );
// returns ~3.627

@example
var v = sinh( -2.0 );
// returns ~-3.627

@example
var v = sinh( NaN );
// returns NaN