2013-01-05 51 views
0

夥計們當我運行它時,我遇到了這個非常奇怪的錯誤。這是重要的代碼:C++ Rnd()錯誤

變量(編輯):

const short int maxX = 100; 
const short int maxZ = 100; 
const short int lakeChance = 0.9; 

addLake功能(編輯):

void addLake(Sect sector[][maxZ], int x, int z){  
    sector[x][z].setMaterial(1); 
} 

主要來源(編輯):

//Generating land mass 
for (int x = 0; x < maxX; x++){ 
    for (int z = 0; z < maxZ; z++){ 
     //Default material 
     sector[x][z].setMaterial(0); 

     //Add lake/sea source 
     int r = rand(); 
     float r1 = (r % 1000); 
     float r2 = r1/1000; 

     if (r2 <= lakeChance) addLake(sector, x, z); 
    } 
} 

錯誤在於,無論我改變'lakeChance'的值,結果都是完全一樣的。儘管我將lakeChance的值更高(即:0.5,0.7,0.9),但addLake函數在每次啓動時似乎被稱爲大約3到6次。只有在我將'lakeChance'的值更改爲1時纔會調用該函數。隨機數生成器可以很好地工作,因此結果每次都會有所變化。

+6

這是一個很棒的時間來產生一個[簡短,自包含,可編譯,正確的例子](http://sscce.org/) –

+1

我知道我會後悔問這個,但變量是哪裏'傳入'sector'聲明/分配? – WhozCraig

+3

您在執行程序期間多久運行一次主源?也就是說,有多少次嘗試是「3到6次」的數字? –

回答

4

我什麼都看不到顯然本身就是錯的。所以,我想下面的代碼位:

int test(float chance) 
{ 
    int call = 0; 

    for(int i = 0; i != 100000; i++) 
    { 
     int r = rand(); 

     float r1 = (r % 1000); 

     float r2 = r1/1000; 

     if(r2 <= chance) 
      call++; 
    } 

    cout << "Chance is " << chance << ": " << call << " invocations or " 
     << ((100.0 * call)/100000.0) << "% of the time!" << endl; 

    return call;  
} 

可以預見的是,我得到了這些結果:

Chance is 0.1: 10216 invocations or 10.216% of the time! 
Chance is 0.2: 20232 invocations or 20.232% of the time! 
Chance is 0.3: 30357 invocations or 30.357% of the time! 
Chance is 0.4: 40226 invocations or 40.226% of the time! 
Chance is 0.6: 60539 invocations or 60.539% of the time! 
Chance is 0.7: 70539 invocations or 70.539% of the time! 
Chance is 0.8: 80522 invocations or 80.522% of the time! 
Chance is 0.9: 90336 invocations or 90.336% of the time! 
Chance is 1: 100000 invocations or 100% of the time! 

多少湖泊是你想補充的嗎?

+0

+1我使用完全不同的代碼庫獲得類似的結果。 – WhozCraig

+0

我在我的功能已經看過,但無論我改變的機會或湖的價值增強的結果並沒有改變。無論什麼機會,我總是得到1到10次的函數。 –

+0

我還是不太明白你遇到的問題。你的問題是你得到太多的湖泊嗎?太少了?你能告訴我們你期望*發生了什麼事情嗎?實際發生了什麼? –

-1

嘗試撥打randomize(),然後致電rand()

+0

我做到了,它不是隨機數字,每次都會有所不同。 –