首先,我在这里和通过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)).
答案 0 :(得分:1)
我创建了一个ES6类,该类在测试中产生的结果与java.util.Random
类相同。到目前为止,我仅实现了.nextInt()
公共方法,但是它是通过受保护的.next()
方法实现的,因此其他公共方法应该易于实现:
https://gist.github.com/raybellis/4c15a1746724be7bd03964e9d03e0c75
编辑的增强版本现在可以作为NPM使用了: