我很想知道为什么random_number=a+rand()%b;
在 C 中会在 a 和 b 之间产生一个随机数(不包括 b)。但在 Java 中,此代码将不起作用。我知道在 Java 中执行此操作的正确方法是,random_number=a+(Math.random()*(b-a));
但我很想知道为什么会有区别?在数学上不是相同的操作吗?我也知道随机函数的返回类型不同,但是这种差异如何解释输出的差异?抱歉,如果这似乎是一个微不足道的问题,但我仍然很好奇。
问问题
2677 次
3 回答
6
不同之处在于每个随机生成器的作用。
在 Java 中,返回范围(包括)到(不包括)Math.Random
的伪随机数。所以它必须按范围的宽度放大,然后移动范围的起点。0
1
b - a
a
在 C 中,rand()
返回范围内的数字0
to RAND_MAX
(my RAND_MAX
is 32767
),so%b
用于控制范围的宽度,范围的开头移动a
.
于 2013-09-30T19:33:06.153 回答
2
当然,可以使用 java.util.Random 的nextInt()
ornextInt(int n)
方法来更准确地模仿 C 方案。 nextInt()
几乎完全相同rand()
(尽管希望分布更好),同时nextInt(int n)
有效地包含了%n
计算。
于 2013-09-30T19:43:04.067 回答
0
在java中是nextInt()
int nextInt(int n)
此函数返回 0 到 n 之间的随机数
在 C 中是rand()
int rand(void)
该函数返回一个介于 0 和 RAND_MAX 之间的整数值。
于 2013-10-02T10:57:23.017 回答