假设你有一个随机数生成器,它生成一个介于[0.0, 1.0)之间的随机浮点数,例如
drand48
,那么如何创建一个随机数生成器来生成介于[1, n]之间的整数?将其乘以n
,向下取整,再加1。
取随机数生成器的结果,乘以n-1,再加上1。
在C语言中的示例:
long rand(int n)
{
double rand1 = 0;
rand1 = drand48();
rand1 *= n - 1;
rand1 += 1;
return (long)rand1;
}
rand1
产生 0。 - Christian Raudrand48
(它生成 [0,1],尽管 OP 要求的是 [0,1) ,但他也引用了 drand48
),将其乘以 n-1
再加 1 将是一个更好的选择。虽然会有一点偏向于较低的端点,但至少它是单调的且范围在 [1,n]。 - Christian Raurand1
生成2n-1
。只需摆脱这个if并进行简单的线性转换,记住rand1
是来自[0,1]的双精度数。 - Christian Rau我相信你可以拥有不同的随机数生成器。
Multiply by n, take the int, and add 1.
drand48
生成的数字是从 [0,1] 而不是 [0,1) 中产生的,那么你真正拥有什么呢?是的,这很重要。 - Christian Raudrand48
,直到获得小于1.0的结果。 - hardmath