java中具有长种子值的随机数生成器
Random number generator in java with long seed values
超级noob问题(来自一个不了解比特技术的人):
我在JavaScript中使用下面的伪随机数生成器(在我的服务器上)。
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();
现在我想在Java中使用它(在我的客户端上)。这对int种子值很有效(例如,在JS和Java上,1234的种子给出相同的数字),但我的种子值很长。我必须如何更改按位运算符?
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);
}
}
在Java中,您需要将种子掩码为unsigned int,然后它会产生与JS版本相同的数字。
新建构造函数:
public CodeGenerator(long seed) {
mask = 0xffffffff;
m_w = (int) (seed & mask);
m_z = 987654321;
}
您是否尝试过只声明种子和第一个结果一样长?
public class CodeGenerator {
private long m_w;
private int mask;
private int m_z;
public static void main(String... a){
System.out.println(new CodeGenerator(1234).nextCode()); //result = 237455
System.out.println(new CodeGenerator(1234567891234L).nextCode()); //result = 246468
}
public CodeGenerator(long 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;
long result = ((m_z << 16) + m_w) & mask;
double result2 = result / 4294967296.0;
return (int)Math.floor((result2 + 0.5) * 999999);
}
}
相关文章:
- java中具有长种子值的随机数生成器
- 在HTML中创建随机数生成器
- 随机数生成器,what'我的方法/统计数据有问题吗?[JS]
- 随机数生成器和if-then语句
- 这个JavaScript随机数生成器是如何工作的
- Javascript随机数生成器到隐藏字段
- JavaScript 中的自定义随机数生成器
- 随机数生成器,无重复修改
- javascript非序列随机数生成器
- 哪些种子用于常见语言中的本地随机数生成器
- 当我的函数在javascript中运行时,我的随机数生成器不断变化
- 在JavaScript中创建一个随机数生成器游戏,无法使While循环保持循环
- 制作一个真正的随机数生成器
- 运行一个随机数生成器在按钮按下
- 如何重置JavaScript随机数生成器
- JavaScript中的Seedable随机数生成器
- 倒计时定时器与随机数生成器
- 随机数生成器w/按钮
- JQuery/JavaScript:使用随机数生成器作为setInterval()计时器
- Javascript中的任何伪随机数生成器