Java的Random类的Javascript实现,它将生成具有相同种子的相同序列

时间:2018-11-06 02:47:40

标签: javascript java random generator

首先,我在这里和通过Google进行了多次搜索,试图在找不到正确的搜索字词的情况下提前找到它。

我正在将一些旧版Java代码重写为Javascript,并且除伪随机数生成器外,它们都可以正常工作...我需要此代码的Javascript版本才能通过Java和Javascript版本获得可重复的输出这样的代码我不能使用Javascript的RN生成器...我也不能更改旧代码以使用另一个RN生成器....

所以我希望有人遇到过类似的情况,并且已经做到了并将Java的RNG写入/移植到Javascript中?

在Java的RNG基于64位种子的情况下,即使JavaScript的按位运算符也只能使用32位的单词工作……显然需要两个变量,每个变量持有1/2的种子...


来自https://docs.oracle.com/javase/8/docs/api/java/util/Random.html

  • Java的setSeed确实

    (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
    
  • 然后下一步

    (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
    
  • 然后返回

    (int)(seed >>> (48 - bits)).
    

1 个答案:

答案 0 :(得分:1)

我创建了一个ES6类,该类在测试中产生的结果与java.util.Random类相同。到目前为止,我仅实现了.nextInt()公共方法,但是它是通过受保护的.next()方法实现的,因此其他公共方法应该易于实现:

https://gist.github.com/raybellis/4c15a1746724be7bd03964e9d03e0c75

编辑的增强版本现在可以作为NPM使用了:

https://www.npmjs.com/package/java-random