Seeding the random number generator in Javascript

后端 未结 13 1657
野趣味
野趣味 2020-11-22 09:28

Is it possible to seed the random number generator (Math.random) in Javascript?

13条回答
  •  半阙折子戏
    2020-11-22 10:17

    No, but here's a simple pseudorandom generator, an implementation of Multiply-with-carry I adapted from Wikipedia (has been removed since):

    var m_w = 123456789;
    var m_z = 987654321;
    var mask = 0xffffffff;
    
    // Takes any integer
    function seed(i) {
        m_w = (123456789 + i) & mask;
        m_z = (987654321 - i) & mask;
    }
    
    // Returns number between 0 (inclusive) and 1.0 (exclusive),
    // just like Math.random().
    function random()
    {
        m_z = (36969 * (m_z & 65535) + (m_z >> 16)) & mask;
        m_w = (18000 * (m_w & 65535) + (m_w >> 16)) & mask;
        var result = ((m_z << 16) + (m_w & 65535)) >>> 0;
        result /= 4294967296;
        return result;
    }
    

    EDIT: fixed seed function by making it reset m_z
    EDIT2: Serious implementation flaws have been fixed

提交回复
热议问题