C与Java中的随机数生成

时间:2013-09-30 19:28:09

标签: java c math random

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

3 个答案:

答案 0 :(得分:6)

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

在Java中,Math.Random通过0(不包括)返回范围1(包括)的伪随机数。因此,它必须按b - a(范围的宽度)进行放大,然后移动a,即范围的开头。

在C中,rand()会返回0RAND_MAX范围内的数字(我的RAND_MAX32767),因此使用了%b控制范围的宽度,范围的开始移动a

答案 1 :(得分:2)

当然可以使用java.util.Random的nextInt()nextInt(int n)方法来更准确地模仿C方案。 nextInt()rand()几乎完全相同(虽然希望更好地分发),而nextInt(int n)有效地包含%n计算。

答案 2 :(得分:0)

在java中,它是nextInt()

int nextInt(int n)

此函数返回0到n之间的随机数

在C中,它是rand()

int rand(void)

此函数返回介于0和RAND_MAX之间的整数值。