2013-09-30 140 views
0

我很想知道C中的random_number=a+rand()%b;爲什麼會產生a和b之間的隨機數(不包括b)。但在Java中,這個代碼不起作用。我知道在Java中這樣做的正確方法是random_number=a+(Math.random()*(b-a));,但我很想知道爲什麼會有差異?數學上的運算不一樣嗎?我也明白,隨機函數的返回類型是不同的,但是這種差別是如何解釋輸出的差異呢?對不起,如果這似乎是一個微不足道的問題,但我很好奇。C與Java中的隨機數生成

+9

爲什麼'Java'與'C'完全不一樣? –

+5

'rand'在'0'和'RAND_MAX'之間生成一個整數。 'Math.random'在'0'和'1'之間生成一個雙精度值。因此,不同的表達。順便說一句,'a + rand()%b'在'a'和'a + b'(不包含)之間生成一個隨機數。你打算寫'a + rand()%(b-a)'。 –

+0

'a + rand()%b'不起作用。也許你正在想'a + rand()%(b-a)'。此外,C rand()返回一個隨機整數,而Java Math.random()返回介於0和1之間的float。 –

回答

6

區別在於每個隨機生成器的作用。

在Java中,Math.Random返回範圍0(含)至1(不含)的僞隨機數。所以它必須按照範圍的寬度b - a放大,然後移動a,範圍的開始。在範圍0

在C中,rand()返回編號,以RAND_MAX(我的RAND_MAX32767),所以%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之間的整數值。