Java中的Math.Rom是如何创建随机数的



我一直在思考如何通过设置时间等启动条件来创建自己的随机数生成器,用于逆向工程mc种子。提前感谢。

  1. Math.random调用random类型的对象,Source

  2. nextDouble被称为源

  3. nextDouble是这样实现的:

public double nextDouble() {
return (((long)(next(26)) << 27) + next(27)) * DOUBLE_UNIT;
}

DOUBLE_UNIT是私有静态最终双DOUBLE-UNIT=0x1.0p-53;//1.0/(1L<<53(来源。

  1. next是这样实现的:
protected int next(int bits) {
long oldseed, nextseed;
AtomicLong seed = this.seed;
do {
oldseed = seed.get();
nextseed = (oldseed * multiplier + addend) & mask;
} while (!seed.compareAndSet(oldseed, nextseed));
return (int)(nextseed >>> (48 - bits));
}

正如你所看到的,这是一个

线性同余伪随机数生成器

最新更新