如何在随机位范围内生成整数

时间:2011-05-24 23:26:20

标签: php random

我有一个随机位源,我想按摩各种大小的整数,大致与流行骰子的大小相关(1-4,1-6等)

我写的代码是PHP,因此该语言的响应是理想的。但是,算法通用响应也会完全没问题。

我更喜欢一个比简单地用我的随机数据块播种PHP的random()函数更复杂的答案。

1 个答案:

答案 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。您可以将其替换为随机位源。