function sici( x, out, stride, offset ) {
	var sgn;
	var si;
	var ci;
	var c;
	var f;
	var g;
	var s;
	var z;

	if ( isnan( x ) ) {
		out[ offset ] = NaN;
		out[ offset + stride ] = NaN;
		return out;
	}
	if ( x < 0.0 ) {
		sgn = -1;
		x = -x;
	} else {
		sgn = 0;
	}
	if ( x === 0.0 ) {
		out[ offset ] = 0.0;
		out[ offset + stride ] = NINF;
		return out;
	}
	if ( x > 1.0e9 ) {
		if ( isInfinite( x ) ) {
			if ( sgn === -1 ) {
				si = -HALF_PI;
				ci = NaN;
			} else {
				si = HALF_PI;
				ci = 0.0;
			}
			out[ offset ] = si;
			out[ offset + stride ] = ci;
			return out;
		}
		si = HALF_PI - ( cos( x ) / x );
		ci = sin( x ) / x;
	}
	if ( x > 4.0 ) {
		s = sin( x );
		c = cos( x );
		z = 1.0 / ( x*x );
		if ( x < 8.0 ) {
			f = polyvalFN4( z ) / ( x * polyvalFD4( z ) );
			g = z * polyvalGN4( z ) / polyvalGD4( z );
		} else {
			f = polyvalFN8( z ) / ( x * polyvalFD8( z ) );
			g = z * polyvalGN8( z ) / polyvalGD8( z );
		}
		si = HALF_PI - ( f*c ) - ( g*s );
		if ( sgn ) {
			si = -si;
		}
		ci = ( f*s ) - ( g*c );
		out[ offset ] = si;
		out[ offset + stride ] = ci;
		return out;
	}
	z = x * x;
	s = x * polyvalSN( z ) / polyvalSD( z );
	c = z * polyvalCN( z ) / polyvalCD( z );
	if ( sgn ) {
		s = -s;
	}
	si = s;
	ci = GAMMA + ln( x ) + c; // real part if x < 0
	out[ offset ] = si;
	out[ offset + stride ] = ci;
	return out;
}
Computes the sine and cosine integrals and assigns results to a provided output array.

## Method

-   The integrals are approximated by rational functions.

-   For \\( x > 8 \\), auxiliary functions \\( f(x) \\) and \\( g(x) \\) are employed such that

    ```tex
    \operatorname{Ci}(x) = f(x) \sin(x) - g(x) \cos(x) \\
    \operatorname{Si}(x) = \pi/2 - f(x) \cos(x) - g(x) \sin(x)
    ```

## Notes

-   Absolute error on test interval \\( \[0,50\] \\), except relative when greater than \\( 1 \\):

    | arithmetic | function    | # trials | peak    | rms     |
    |:----------:|:-----------:|:--------:|:-------:|:-------:|
    | IEEE       | Si          | 30000    | 4.4e-16 | 7.3e-17 |
    | IEEE       | Ci          | 30000    | 6.9e-16 | 5.1e-17 |

@private
@param {number} x - input value
@param {Collection} out - output array
@param {integer} stride - output array stride
@param {NonNegativeInteger} offset - output array index offset
@returns {Collection} output array

@example
var v = sici( 3.0, [ 0.0, 0.0 ], 1, 0 );
// returns [ ~1.849, ~0.12 ]

@example
var v = sici( 0.0, [ 0.0, 0.0 ], 1, 0 );
// returns [ 0.0, -Infinity  ]

@example
var v = sici( -9.0, [ 0.0, 0.0 ], 1, 0 );
// returns [ ~-1.665, ~0.055 ]

@example
var v = sici( NaN, [ 0.0, 0.0 ], 1, 0 );
// returns [ NaN, NaN ]