我很想知道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。 –