function cos( x ) {
	var ix;
	var n;

	ix = getHighWord( x );
	ix &= ABS_MASK;

	// Case: |x| ~< pi/4
	if ( ix <= HIGH_WORD_PIO4 ) {
		// Case: x < 2**-27
		if ( ix < HIGH_WORD_TWO_NEG_27 ) {
			return 1.0;
		}
		return kernelCos( x, 0.0 );
	}
	// Case: cos(Inf or NaN) is NaN */
	if ( ix >= EXPONENT_MASK ) {
		return NaN;
	}
	// Case: Argument reduction needed...
	n = rempio2( x, buffer );
	switch ( n & 3 ) {
	case 0:
		return kernelCos( buffer[ 0 ], buffer[ 1 ] );
	case 1:
		return -kernelSin( buffer[ 0 ], buffer[ 1 ] );
	case 2:
		return -kernelCos( buffer[ 0 ], buffer[ 1 ] );
	default:
		return kernelSin( buffer[ 0 ], buffer[ 1 ] );
	}
}
Computes the cosine of a number.

## Method

-   Let \\(S\\), \\(C\\), and \\(T\\) denote the \\(\sin\\), \\(\cos\\), and \\(\tan\\), respectively, on \\(\[-\pi/4, +\pi/4\]\\).

-   Reduce the argument \\(x\\) to \\(y1+y2 = x-k\pi/2\\) in \\(\[-\pi/4, +\pi/4\]\\), and let \\(n = k \mod 4\\).

-   We have

    | n | sin(x) | cos(x) | tan(x) |
    | - | ------ | ------ | ------ |
    | 0 |   S    |   C    |    T   |
    | 1 |   C    |  -S    |  -1/T  |
    | 2 |  -S    |  -C    |    T   |
    | 3 |  -C    |   S    |  -1/T  |

@param {number} x - input value (in radians)
@returns {number} cosine

@example
var v = cos( 0.0 );
// returns 1.0

@example
var v = cos( 3.141592653589793/4.0 );
// returns ~0.707

@example
var v = cos( -3.141592653589793/6.0 );
// returns ~0.866

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