function increwvariance( alpha ) {
	var incr;
	var s2;
	var r;
	var m;
	var c;
	if ( !isNonNegativeNumber( alpha ) ) {
		throw new TypeError( format( 'invalid argument. Must provide a nonnegative number. Value: `%s`.', alpha ) );
	}
	if ( alpha < 0.0 || alpha > 1.0 ) {
		throw new RangeError( format( 'invalid argument. Must provide a nonnegative number on the interval: [0, 1]. Value: `%f`.', alpha ) );
	}
	c = 1.0 - alpha;
	return accumulator;

	/**
	* If provided a value, the accumulator function returns an updated variance. If not provided a value, the accumulator function returns the current variance.
	*
	* @private
	* @param {number} [x] - new value
	* @returns {(number|null)} variance or null
	*/
	function accumulator( x ) {
		if ( arguments.length === 0 ) {
			return ( s2 === void 0 ) ? null : s2;
		}
		if ( s2 === void 0 ) {
			m = x;
			s2 = 0.0;
		} else {
			r = x - m;
			incr = alpha * r;
			m += incr;
			s2 = c * ( s2+(r*incr) );
		}
		return s2;
	}
}
Returns an accumulator function which incrementally computes an exponentially weighted variance.

@param {NonNegativeNumber} alpha - smoothing factor
@throws {TypeError} must provide a nonnegative number
@throws {RangeError} must be on the interval `[0,1]`
@returns {Function} accumulator function

@example
var accumulator = increwvariance( 0.5 );

var v = accumulator();
// returns null

v = accumulator( 2.0 );
// returns 0.0

v = accumulator( -5.0 );
// returns 12.25

v = accumulator();
// returns 12.25