Skip to content

Commit 9a6d63f

Browse files
refactor: updated 64-bit operations to follow big-endian notation
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent 9a88df5 commit 9a6d63f

File tree

1 file changed

+35
-33
lines changed
  • lib/node_modules/@stdlib/random/base/pcg32/lib

1 file changed

+35
-33
lines changed

lib/node_modules/@stdlib/random/base/pcg32/lib/factory.js

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ var randuint32 = require( './rand_uint32.js' );
4646
var NORMALIZATION_CONSTANT = UINT32_MAX + 1;
4747
var MAX_SEED = UINT32_MAX >>> 0; // asm type annotation
4848

49-
// LCG multiplier
50-
var MULTIPLIER = [ 0x4C957F2D >>> 0, 0x5851F42D >>> 0 ]; // asm type annotation
49+
// Define the LCG multiplier
50+
var MULTIPLIER = [ 0x5851F42D >>> 0, 0x4C957F2D >>> 0 ]; // asm type annotation
5151

52-
// LCG increment, controls the stream. #TODO: Make user definable like seed
53-
var INCREMENT = [ 0x0000DEAD >>> 0, 0xBEEF0000 >>> 0 ]; // asm type annotation
52+
// Define the LCG increment which controls the stream. #TODO: Make user definable like seed
53+
var INCREMENT = [ 0xBEEF0000 >>> 0, 0x0000DEAD >>> 0 ]; // asm type annotation
5454

5555
// Define the size of state as a multiple of 32-bits
5656
var N = 2;
@@ -216,10 +216,11 @@ function factory( options ) {
216216

217217
// Initialize the internal PRNG state:
218218
pcg32();
219-
state.set( addUint64( state, [
220-
seed[ 0 ],
221-
( slen > 1 ) ? seed[ 1 ] : 0
222-
]) );
219+
if ( slen > 1 ) {
220+
state.set( addUint64( state, [ seed[ 0 ], seed[ 1 ] ] ) );
221+
} else {
222+
state.set( addUint64( state, [ 0, seed[ 0 ] ] ) );
223+
}
223224
pcg32();
224225
} else {
225226
throw new TypeError( format( 'invalid option. `%s` option must be either a positive integer less than the maximum unsigned 32-bit integer or an array-like object containing integer values less than the maximum unsigned 32-bit integer. Option: `%s`.', 'seed', seed ) );
@@ -249,7 +250,7 @@ function factory( options ) {
249250

250251
// Initialize the internal PRNG state:
251252
pcg32();
252-
state.set( addUint64( state, [ seed[ 0 ], 0 ] ) );
253+
state.set( addUint64( state, [ 0, seed[ 0 ] ] ) );
253254
pcg32();
254255
}
255256

@@ -417,56 +418,57 @@ function factory( options ) {
417418

418419
state.set( addUint64( multUint64( oldstate, MULTIPLIER ), INCREMENT ) );
419420

420-
xorshifted[0] = ( ( oldstate[0] >>> 18 ) | ( oldstate[1] << 14 ) ) >>> 0;
421-
xorshifted[1] = ( oldstate[1] >>> 18 ) >>> 0;
421+
xorshifted[1] = ( ( oldstate[1] >>> 18 ) | ( oldstate[0] << 14 ) ) >>> 0;
422+
xorshifted[0] = ( oldstate[0] >>> 18 ) >>> 0;
422423

423-
xorshifted[0] ^= oldstate[0];
424424
xorshifted[1] ^= oldstate[1];
425+
xorshifted[0] ^= oldstate[0];
425426

426-
xorshifted[0] = ( ( xorshifted[0] >>> 27 ) | ( xorshifted[1] << 5 ) ) >>> 0;
427-
xorshifted[1] = ( xorshifted[1] >>> 27 ) >>> 0;
427+
xorshifted[1] = ( ( xorshifted[1] >>> 27 ) | ( xorshifted[0] << 5 ) ) >>> 0;
428+
xorshifted[0] = ( xorshifted[0] >>> 27 ) >>> 0;
428429

429-
rot = oldstate[1] >>> 27;
430-
return ( (xorshifted[0] >>> rot) | ( xorshifted[0] << ( -rot & 31 ) ) ) >>> 0;
430+
rot = oldstate[0] >>> 27;
431+
return ( (xorshifted[1] >>> rot) | ( xorshifted[1] << ( -rot & 31 ) ) ) >>> 0;
431432
}
432433

433434
/**
434435
* Adds two 64-bit unsigned integers.
435436
*
436437
* @private
437-
* @param {ArrayLike<uinteger32>} a - 64-bit unsigned integer as [ low, high ]
438-
* @param {ArrayLike<uinteger32>} b - 64-bit unsigned integer as [ low, high ]
439-
* @returns {ArrayLike<uinteger32>} 64-bit unsigned integer sum as [ low, high ]
438+
* @param {ArrayLike<uinteger32>} a - 64-bit unsigned integer as [ high, low ]
439+
* @param {ArrayLike<uinteger32>} b - 64-bit unsigned integer as [ high, low ]
440+
* @returns {ArrayLike<uinteger32>} 64-bit unsigned integer sum as [ high, low ]
440441
*/
441442
function addUint64( a, b ) {
442-
var la = a[0] >>> 0;
443-
var ha = a[1] >>> 0;
444-
var lb = b[0] >>> 0;
445-
var hb = b[1] >>> 0;
443+
var la = a[1] >>> 0;
444+
var ha = a[0] >>> 0;
445+
var lb = b[1] >>> 0;
446+
var hb = b[0] >>> 0;
446447

447448
var ls = ( la + lb ) >>> 0;
448449
var hs = ( ha + hb + ( ls < la ) ) >>> 0;
449-
return [ ls >>> 0, hs >>> 0 ];
450+
return [ hs >>> 0, ls >>> 0 ];
450451
}
451452

452453
/**
453454
* Multiplies two 64-bit unsigned integers.
454455
*
455456
* @private
456-
* @param {ArrayLike<uinteger32>} a - 64-bit unsigned integer as [ low, high ]
457-
* @param {ArrayLike<uinteger32>} b - 64-bit unsigned integer as [ low, high ]
458-
* @returns {ArrayLike<uinteger32>} 64-bit unsigned integer product as [ low, high ]
457+
* @param {ArrayLike<uinteger32>} a - 64-bit unsigned integer as [ high, low ]
458+
* @param {ArrayLike<uinteger32>} b - 64-bit unsigned integer as [ high, low ]
459+
* @returns {ArrayLike<uinteger32>} 64-bit unsigned integer product as [ high, low ]
459460
*/
460461
function multUint64( a, b ) {
461-
var la = a[0] >>> 0;
462-
var ha = a[1] >>> 0;
463-
var lb = b[0] >>> 0;
464-
var hb = b[1] >>> 0;
462+
var la = a[1] >>> 0;
463+
var ha = a[0] >>> 0;
464+
var lb = b[1] >>> 0;
465+
var hb = b[0] >>> 0;
466+
465467
var m1 = umul( la, hb ) >>> 0;
466468
var m2 = umul( ha, lb ) >>> 0;
467469
var p = umuldw( la, lb );
468-
p = [ p[ 1 ], p[ 0 ] ]; // swap to make little-endian
469-
p[ 1 ] = ( p[ 1 ] + m1 + m2 ) >>> 0;
470+
471+
p[ 0 ] = ( p[ 0 ] + m1 + m2 ) >>> 0;
470472
return p;
471473
}
472474

0 commit comments

Comments
 (0)