function accumulator1( x, y ) {
		var n;
		if ( arguments.length === 0 ) {
			if ( N === 0 ) {
				return null;
			}
			if ( N === 1 ) {
				return ( isnan( M2x ) || isnan( M2y ) ) ? NaN : 0.0;
			}
			return ( C/(N-1) ) / ( sx*sy );
		}
		N += 1;

		dx = x - mx;
		mx += dx / N;
		M2x += dx * ( x-mx );

		dy1 = y - my;
		my += dy1 / N;
		dy2 = y - my;
		M2y += dy2 * dy1;

		C += dx * dy2;
		if ( N < 2 ) {
			return ( isnan( M2x ) || isnan( M2y ) ) ? NaN : 0.0;
		}
		n = N - 1;
		sx = sqrt( M2x/n );
		sy = sqrt( M2y/n );
		return ( C/n ) / ( sx*sy ); // Note: why all the dividing by `N`? To avoid overflow.
	}
If provided input values, the accumulator function returns an updated sample correlation coefficient. If not provided input values, the accumulator function returns the current sample correlation coefficient.

@private
@param {number} [x] - new value
@param {number} [y] - new value
@returns {(number|null)} sample correlation coefficient or null