gpt4 book ai didi

java - 调整 XORShift 生成器以返回最大值内的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:22 27 4
gpt4 key购买 nike

我需要在最大值范围内生成随机整数。由于性能至关重要,我决定使用 XORShift 生成器而不是 Java 的 Random 类。

long seed = System.nanoTime();
seed ^= (seed << 21);
seed ^= (seed >>> 35);
seed ^= (seed << 4);

此实现 (source) 给了我一个长整数,但我真正想要的是一个介于 0 和最大值之间的整数。

public int random(int max){ /*...*/}

实现此方法最有效的方法是什么?

最佳答案

我从你的代码中得到了一些乐趣并想出了这个:

public class XORShiftRandom {

private long last;
private long inc;

public XORShiftRandom() {
this(System.currentTimeMillis());
}

public XORShiftRandom(long seed) {
this.last = seed | 1;
inc = seed;
}

public int nextInt(int max) {
last ^= (last << 21);
last ^= (last >>> 35);
last ^= (last << 4);
inc += 123456789123456789L;
int out = (int) ((last+inc) % max);
return (out < 0) ? -out : out;
}

}

我做了一个简单的测试,它的速度大约是 java.util.Random

4

如果你对它的工作原理感兴趣,你可以阅读这个 paper :

免责声明:

The code above is designed to be used for research only, and not as a replacement to the stock Random or SecureRandom.

关于java - 调整 XORShift 生成器以返回最大值内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13213395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com