function accumulator( x ) {
		if ( arguments.length === 0 ) {
			return ( prod === void 0 ) ? null : prod;
		}
		// Split the incoming value into a normalized fraction and exponent:
		frexp( x, PARTS, 1, 0 );

		// Update the accumulated fraction:
		frac *= PARTS[ 0 ];

		// Update the accumulated exponent:
		exp += PARTS[ 1 ];

		// Ensure fraction remains normalized to avoid overflow/underflow...
		if ( frac > -0.5 && frac < 0.5 ) {
			frexp( frac, PARTS, 1, 0 );
			frac = PARTS[ 0 ];
			exp += PARTS[ 1 ];
		}
		prod = ldexp( frac, exp );
		return prod;
	}
If provided a value, the accumulator function returns an updated product. If not provided a value, the accumulator function returns the current product.

@private
@param {number} [x] - new value
@returns {(number|null)} product or null