diff --git a/lib/node_modules/@stdlib/number/uint32/base/muldw/benchmark/benchmark.js b/lib/node_modules/@stdlib/number/uint32/base/muldw/benchmark/benchmark.js index 2a1258a668f9..0cceb25b7f8d 100644 --- a/lib/node_modules/@stdlib/number/uint32/base/muldw/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/number/uint32/base/muldw/benchmark/benchmark.js @@ -21,7 +21,7 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var minstd = require( '@stdlib/random/base/minstd' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; @@ -33,12 +33,17 @@ var umuldw = require( './../lib' ); bench( pkg, function benchmark( b ) { var x; var y; + var z; var i; + x = discreteUniform( 100, 0x10000, 0x10000000, { + 'dtype': 'uint32' + }); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = minstd(); - y = umuldw( x, x ); + z = x[ i%x.length ]; + y = umuldw( z, z ); if ( isnan( y[0] ) ) { b.fail( 'should not return NaN' ); } @@ -55,14 +60,19 @@ bench( format( '%s:assign', pkg ), function benchmark( b ) { var out; var x; var y; + var z; var i; - out = [ 0.0, 0.0]; + x = discreteUniform( 100, 0x10000, 0x10000000, { + 'dtype': 'uint32' + }); + + out = [ 0.0, 0.0 ]; b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = minstd(); - y = umuldw.assign( x, x, out, 1, 0 ); + z = x[ i%x.length ]; + y = umuldw.assign( z, z, out, 1, 0 ); if ( isnan( y[0] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/number/uint32/base/muldw/lib/assign.js b/lib/node_modules/@stdlib/number/uint32/base/muldw/lib/assign.js index 86c1445e4bf4..5273cae0c8fb 100644 --- a/lib/node_modules/@stdlib/number/uint32/base/muldw/lib/assign.js +++ b/lib/node_modules/@stdlib/number/uint32/base/muldw/lib/assign.js @@ -20,7 +20,7 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var umul = require( '@stdlib/number/uint32/base/mul' ); // VARIABLES // @@ -49,7 +49,6 @@ var LOW_WORD_MASK = 0x0000ffff>>>0; // asm type annotation function umuldw(a, b, out, stride, offset ) { var w1; var w2; - var w3; var ha; var hb; var la; @@ -57,11 +56,6 @@ function umuldw(a, b, out, stride, offset ) { var t; var k; - if ( isnan( a ) || isnan( b ) ) { - out[ offset ] = NaN; - out[ offset + stride ] = NaN; - return out; - } a >>>= 0; // asm type annotation b >>>= 0; // asm type annotation @@ -72,7 +66,6 @@ function umuldw(a, b, out, stride, offset ) { lb = ( b & LOW_WORD_MASK ) >>> 0; t = ( la*lb ) >>> 0; - w3 = ( t & LOW_WORD_MASK ) >>> 0; k = ( t >>> 16 ) >>> 0; t = ( ( ha*lb ) + k ) >>> 0; @@ -83,7 +76,7 @@ function umuldw(a, b, out, stride, offset ) { k = ( t >>> 16 ) >>> 0; out[ offset ] = ( ( ha*hb ) + w1 + k ) >>> 0; // compute the higher 32 bits and cast to an unsigned 32-bit integer - out[ offset + stride ] = ( ( t << 16 ) + w3) >>> 0; // compute the lower 32 bits and cast to an unsigned 32-bit integer + out[ offset + stride ] = umul( a, b ) >>> 0; // compute the lower 32 bits and cast to an unsigned 32-bit integer return out; } diff --git a/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.assign.js b/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.assign.js index 084332c020a0..e26ba0b8aca4 100644 --- a/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.assign.js +++ b/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.assign.js @@ -21,7 +21,6 @@ // MODULES // var tape = require( 'tape' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var Float64Array = require( '@stdlib/array/float64' ); var umuldw = require( './../lib/assign.js' ); @@ -39,31 +38,6 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'the function returns `NaN` if provided `NaN`', function test( t ) { - var out; - var v; - - out = [ 0, 0 ]; - v = umuldw( NaN, 1, out, 1, 0 ); - t.strictEqual( v, out, 'returns output array' ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - out = [ 0, 0 ]; - v = umuldw( 1, NaN, out, 1, 0 ); - t.strictEqual( v, out, 'returns output array' ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - out = [ 0, 0 ]; - v = umuldw( NaN, NaN, out, 1, 0 ); - t.strictEqual( v, out, 'returns output array' ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - t.end(); -}); - tape( 'the function computes the double word product of two (unsigned) words', function test( t ) { var expected; var actual; diff --git a/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.main.js b/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.main.js index ff5c1efdda7e..059b517aecdb 100644 --- a/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.main.js +++ b/lib/node_modules/@stdlib/number/uint32/base/muldw/test/test.main.js @@ -21,7 +21,6 @@ // MODULES // var tape = require( 'tape' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var umuldw = require( './../lib/main.js' ); @@ -38,24 +37,6 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'the function returns `NaN` if provided `NaN`', function test( t ) { - var v; - - v = umuldw( NaN, 1 ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - v = umuldw( 1, NaN ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - v = umuldw( NaN, NaN ); - t.strictEqual( isnan( v[0] ), true, 'returns expected value' ); - t.strictEqual( isnan( v[1] ), true, 'returns expected value' ); - - t.end(); -}); - tape( 'the function computes the double word product of two (unsigned) words', function test( t ) { var expected; var actual;