在做一个简单的 PRNG 项目时。我遇到了 Math.pow 的奇怪行为,只是将数字相乘。这是什么原因?我已经包含了 PRNG 类,以及我用来运行程序的主类。如果比较结果,它会很好地开始,但在第 3 次迭代中,乘法 PRNG 与 Math.pow() PRNG 不同。乘法 PRNG 也开始给出负数。这是不应该的。
public class PRNG {
int seed;
/**
* Creates a PRNG with the seed x0
*/
public PRNG(int x0){
this.seed = x0;
}
/**
* Return the next random number
*/
public int nextRand(){
//seed = (int) ((Math.pow(7, 5) * seed) % (Math.pow(2, 31) - 1));
seed = (int) ((7*7*7*7*7 * seed) % (Math.pow(2, 31) - 1));
return seed;
}
}
主要的:
public class main {
final static int SEED = 1;
public static void main(String[] args) {
PRNG prng = new PRNG(SEED);
for(int i = 0; i < 100; i++){
System.out.println(prng.nextRand());
}
}
}
提前致谢!