C与Java中的随机数生成

Joh*_*n R 0 c java random math

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

rge*_*man 6

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

在Java中,Math.Random返回范围0(包括)到1(不包括)的伪随机数.因此,它必须按b - a范围的宽度按比例放大,然后移动范围a的开始.

在C中,rand()返回范围中的数字0RAND_MAX(my RAND_MAXis 32767),因此%b用于控制范围的宽度,并且范围的开始移动a.