我有一个随机位源,我想按摩各种大小的整数,大致与流行骰子的大小相关(1-4,1-6等)
我写的代码是PHP,因此该语言的响应是理想的。但是,算法通用响应也会完全没问题。
我更喜欢一个比简单地用我的随机数据块播种PHP的random()函数更复杂的答案。
答案 0 :(得分:4)
如果您有可用的任意位数,您可以选择使用拒绝方法,与Java的Random.nextInt(int)
一致。从那里取出的伪代码是:
public int nextInt(int n) {
if (n<=0)
new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits - val + (n-1) < 0);
return val;
}
next()
是一个返回指定数量的随机位的函数,连接成int
。您可以将其替换为随机位源。