2012-03-23 68 views
-1

我在Mac OS X 10.7.3上使用GCC 4.2。所有工作都很好,直到我更新它。我完全不知道爲什麼它不再有效。rand()給出的值非常接近

的問題如下:

rand()給我回它非常接近海誓山盟,但不等於價值。所以,在多次運行程序時,我會得到類似的答案。

的輸出:

(double)rand()/(double)RAND_MAX. 

0.945264, 
0.945295, 
0.945335 

(差別變得越來越大時,有更多的時間已經過去了。) 我使用srand(time(NULL));種子它,它運作良好,直到短短一個小時之前當我更新它。我現在測試了20次,所有輸出都是大約。同樣的,這當然不是隨機的。 有什麼建議嗎? 編輯

#include <stdlib.h> 
main() 
{ 
srand(time(NULL)); 
printf("%f",(double)rand()/(double)RAND_MAX); 
} 

(這是我的代碼,對不起,我吸與格式。)

+2

請發表[** **最少測試用例(HTTP:/ /sscce.org)。 – 2012-03-23 22:03:50

+0

直到你更新*什麼*? – 2012-03-23 22:04:20

+0

直到我更新了我的編譯器gcc。 – ClausW 2012-03-23 22:05:33

回答

-3

如果用time(NULL)看到它,我相信它會永遠是接近對方,因爲時間慢遞增。隨着時間的流逝,你會看到你的隨機數字會稍微變化。

試試這個:

(double)srand(time(NULL))/(double)RAND_MAX. 

-------- --------編輯

看起來像我原來的設想是錯誤的。我跑了這一個得到非常不同的隨機數字沒有重新播種。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void) 
{ 
    int i, p; 

    srand(time(NULL)); 

    for(p=0;p<10;p++){ 
    i = rand(); 

    printf ("Your random number is %d\n", i); 

    } 
    return(0); 
} 
+1

這並不一定遵循。附近的種子不一定會翻譯成附近的隨機數字。 – 2012-03-23 22:16:33

+0

@OliCharlesworth - 正確,但我認爲他只播種一次。而不是播種每個隨機數提取。這只是一個假設,他沒有發佈足夠的代碼。 – ProfessionalAmateur 2012-03-23 22:17:40

+0

好吧,它**工作正常,並且通常'srand(time(NULL))'是創建隨機數的正確方法。 – ClausW 2012-03-23 22:18:39

0

這可能是另一個possbility:

我認爲這是你對你的srand

放置當我張貼此

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    for(i=0;i<4;i++){ 
     srand(time(NULL)); 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

我得到這樣的結果

0.314774 
0.314774 
0.314774 
0.314774 

但是當我移動srand之外循環的,我得到不同的隨機numers

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i; 
    srand(time(NULL)); 
    for(i=0;i<4;i++){ 
     printf("%f\n",(double)rand()/(double)RAND_MAX); 
    } 
    return(0); 
} 

我得到這些結果

0.154158 
0.832643 
0.529257 
0.529633