0

我很想知道为什么random_number=a+rand()%b;在 C 中会在 a 和 b 之间产生一个随机数(不包括 b)。但在 Java 中,此代码将不起作用。我知道在 Java 中执行此操作的正确方法是,random_number=a+(Math.random()*(b-a));但我很想知道为什么会有区别?在数学上不是相同的操作吗?我也知道随机函数的返回类型不同,但是这种差异如何解释输出的差异?抱歉,如果这似乎是一个微不足道的问题,但我仍然很好奇。

4

3 回答 3

6

不同之处在于每个随机生成器的作用。

在 Java 中,返回范围(包括)到(不包括)Math.Random的伪随机数。所以它必须按范围的宽度放大,然后移动范围的起点。01b - aa

在 C 中,rand()返回范围内的数字0to RAND_MAX(my RAND_MAXis 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 回答