我很想知道C中的random_number=a+rand()%b;
为什么会产生a和b之间的随机数(不包括b)。但在Java中,这个代码不起作用。我知道在Java中这样做的正确方法是random_number=a+(Math.random()*(b-a));
,但我很想知道为什么会有差异?数学上的运算不一样吗?我也明白,随机函数的返回类型是不同的,但是这种差别是如何解释输出的差异呢?对不起,如果这似乎是一个微不足道的问题,但我很好奇。C与Java中的随机数生成
0
A
回答
6
区别在于每个随机生成器的作用。
在Java中,Math.Random
返回范围0
(含)至1
(不含)的伪随机数。所以它必须按照范围的宽度b - a
放大,然后移动a
,范围的开始。在范围0
在C中,rand()
返回编号,以RAND_MAX
(我的RAND_MAX
是32767
),所以%b
用于控制的范围内的宽度,并且该范围的开始是由a
移位。
2
当然可以使用java.util.Random的nextInt()
或nextInt(int n)
方法来更精确地模仿C方案。 nextInt()
几乎与rand()
(尽管希望更好地分发)完全相同,而nextInt(int n)
实际上包含%n
计算。
0
在java中它是nextInt()
int nextInt(int n)
此功能0之间至n
返回随机数在C它是rand()
int rand(void)
该函数返回0到RAND_MAX之间的整数值。
相关问题
- 1. 生成随机数序列与在Java
- 2. C++中的C++随机数生成器
- 3. 随机数生成器帮助不生成随机数 - C
- 4. C - 生成随机数
- 5. C++生成随机数-1
- 6. C#生成随机数
- 7. Java中的并发随机数生成
- 8. Java中的随机数生成器
- 9. C中的随机数生成#
- 10. c中的随机数生成器#
- 11. 在c中生成整数随机数#
- 12. C++在函数中生成随机数
- 13. java:在循环中生成随机数
- 14. 如何在java中生成随机数
- 15. 在java中生成随机数
- 16. C++生成25位数的随机数?
- 17. 在C中生成随机数字
- 18. 在C++中生成随机双数
- 19. 生成可验证的随机数 - Java
- 20. 生成唯一的随机数字JAVA
- 21. 生成非常大的随机数java
- 22. Java生成非重复的随机数
- 23. 生成随机数:计算随机生成的x次数
- 24. 生成随机数的代码C++
- 25. C++随机生成16的倍数
- 26. C++随机生成的数字
- 27. 随机数生成 - ARM7上的C
- 28. 如何生成大的随机数C
- 29. 随机数生成
- 30. 生成随机数
为什么'Java'与'C'完全不一样? –
'rand'在'0'和'RAND_MAX'之间生成一个整数。 'Math.random'在'0'和'1'之间生成一个双精度值。因此,不同的表达。顺便说一句,'a + rand()%b'在'a'和'a + b'(不包含)之间生成一个随机数。你打算写'a + rand()%(b-a)'。 –
'a + rand()%b'不起作用。也许你正在想'a + rand()%(b-a)'。此外,C rand()返回一个随机整数,而Java Math.random()返回介于0和1之间的float。 –