mersenne-twister-serializable

1.0.0 • Public • Published

mersenne-twister-serializable

A serializable Mersenne Twister

A modification of fast-mersenne-twister to support serializing / deserializing (allows to save / restore the seed) and with compatibility enhancements for older browsers/environments.

Usage

const { createMersenneTwister } = require('mersenne-twister-serializable');

let twister = createMersenneTwister(1234567890);

console.log(twister.random()); // 0.6187947695143521

let state = twister.save(); // state is an Object that can be serialized to JSON

console.log(twister.random()); // 0.3405089376028627

twister.restore(state);

console.log(twister.random()); // 0.3405089376028627

let another = createMersenneTwister(state);

console.log(another.random()); // 0.3405089376028627

You can also use an array seed:

const { createMersenneTwister } = require('mersenne-twister-serializable');

let twister = createMersenneTwister([1234, 5678, 9012]);

console.log(twister.random()); // 0.22977210697717965

Methods

All of the original methods are available on the MersenneTwister object returned by the exported function.

They are also aliased to more readable / convenient names.

Convenience Original Return
randomNumber genrand_int32 32 bit integer, [0,0xffffffff]
random31Bit genrand_int31 31 bit integer, [0,0x7fffffff]
randomInclusive genrand_real1 float, [0,1]
random genrand_real2 float, [0,1) (this is just like what Math.random() returns)
randomExclusive genrand_real3 float, (0,1)
random53Bit genrand_res53 float, [0,1) with 53-bit resolution
save toJSON serializable Object with Number n and Array d
restore fromJSON void

Notes

  • Extremely true to the original algorithm by Matsumoto & Nishimura
  • Converted to JavaScript by Stephan Brumme
    • This version cannot be initialized with an array
  • Updated by Thomas Randolph for compliance and performance
    • with all of the original random generators
    • with the ability to be initialized with an array
    • with the correct range (the original only outputs unsigned integers, while Stephan's version outputs signed integers)
  • Updated by Jimb Esser
    • with my code style
    • to support saving/restoring
    • to support older browsers/environments
    • performance optimizations

Package Sidebar

Install

npm i mersenne-twister-serializable

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

11.5 kB

Total Files

4

Last publish

Collaborators

  • jimbly