function nanmskrange( N, x, strideX, offsetX, mask, strideMask, offsetMask ) {
	var max;
	var min;
	var ix;
	var im;
	var ox;
	var om;
	var v;
	var i;

	if ( N <= 0 ) {
		return NaN;
	}
	ox = arraylike2object( x );
	om = arraylike2object( mask );
	if ( ox.accessorProtocol || om.accessorProtocol ) {
		return accessors( N, ox, strideX, offsetX, om, strideMask, offsetMask );
	}
	ix = offsetX;
	im = offsetMask;
	for ( i = 0; i < N; i++ ) {
		v = x[ ix ];
		if ( v === v && mask[ im ] === 0 ) {
			break;
		}
		ix += strideX;
		im += strideMask;
	}
	if ( i === N ) {
		return NaN;
	}
	min = v;
	max = min;
	i += 1;
	for ( i; i < N; i++ ) {
		ix += strideX;
		im += strideMask;
		if ( mask[ im ] ) {
			continue;
		}
		v = x[ ix ];
		if ( isnan( v ) ) {
			continue;
		}
		if ( v < min ) {
			min = v;
		} else if ( v > max ) {
			max = v;
		}
	}
	return max - min;
}
Computes the range of a strided array according to a mask, ignoring `NaN` values.

@param {PositiveInteger} N - number of indexed elements
@param {NumericArray} x - input array
@param {integer} strideX - `x` stride length
@param {NonNegativeInteger} offsetX - `x` starting index
@param {NumericArray} mask - mask array
@param {integer} strideMask - `mask` stride length
@param {NonNegativeInteger} offsetMask - `mask` starting index
@returns {number} range

@example
var floor = require( '@stdlib/math/base/special/floor' );

var x = [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, 5.0, 6.0 ];
var mask = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ];
var N = floor( x.length / 2 );

var v = nanmskrange( N, x, 2, 1, mask, 2, 1 );
// returns 6.0