PRNG Performance (v2)

Revision 2 of this benchmark created by PRNGs on


Preparation HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/2.4.2/lib/xor4096.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/2.4.2/lib/alea.min.js"></script>
<script src="//cdn.rawgit.com/banksean/300494/raw/ecfd3ee68aeebc8894bf825854218df1d8369c72/mersenne-twister.js"></script>

Setup

var seed = new Uint32Array(1024);
    window.crypto.getRandomValues(seed);
    xor4096gen = new xor4096(seed);
    aleagen = new alea(seed);
    
    var MAX_RAND = Math.pow(2, 32);
    var state = [seed[0], seed[1]];
    
    mwc1616 = function mwc1616() {
        var r0 = (18030 * (state[0] & 0xFFFF)) + (state[0] >>> 16) | 0;
        var r1 = (36969 * (state[1] & 0xFFFF)) + (state[1] >>> 16) | 0;
        state = [r0, r1];
    
        var x = ((r0 << 16) + r1) | 0;
        if (x < 0) {
            x = x + MAX_RAND;
        }
        return x / MAX_RAND;
    }
    
    mt = new MersenneTwister(seed[0]);
    
    var crypto_random = (function() {
        var m = Math.pow(2, 32);
    
        var cache_size = 1024
          , cache = new Uint32Array(cache_size)
          , position = cache_size;
    
        var random = function random() {
            position += 1;
            if (position >= cache_size) {
                window.crypto.getRandomValues(cache);
                position = 0;
            }
            return cache[position] / m;
        }
    
        return random;
    })();

Test runner

Ready to run.

Testing in
TestOps/sec
Math.random() (native)
Math.random();
ready
xor4096
xor4096gen();
 
ready
alea
aleagen();
ready
mwc1616
mwc1616();
ready
mersenne twister
mt.random();
ready
crypto.getRandomValues
crypto_random();
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 2: published by PRNGs on