mercredi 11 mai 2016

Random number generator in java with long seed values

Super noob question (from a guy not understanding the bitwise stuff):

I use the pseudo random number generator below in JavaScript (on my server).

Math.seed = function(s) {
    var m_w  = s;
    var m_z  = 987654321;
    var mask = 0xffffffff;

    return function() {
      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) & mask;
      result /= 4294967296;

      return result + 0.5;
    }
}

var myRandomFunction = Math.seed(1234);
var randomNumber = myRandomFunction();

Now I want to use it in Java (on my client). This works fine for int seed values (e.g. a seed of 1234 gives same numbers on JS and Java), but my seed value is long. How do I have to change the bitwise operators?

public class CodeGenerator {
    private int m_w;
    private int mask;
    private int m_z;

    public CodeGenerator(int seed) {
        m_w = seed;
        m_z = 987654321;
        mask = 0xffffffff;
    }

    public int nextCode() {
        m_z = (36969 * (m_z & 65535) + (m_z >> 16)) & mask;
        m_w = (18000 * (m_w & 65535) + (m_w >> 16)) & mask;
        int result = ((m_z << 16) + m_w) & mask;
        double result2 = result / 4294967296.0;
        return (int)Math.floor((result2 + 0.5) * 999999);
    }
}




Aucun commentaire:

Enregistrer un commentaire