2017-01-28 46 views
1

我很好奇這個泊松分佈實施返回0,爲什麼下面的實現總是使用Visual Studio編譯器返回0,但是當用gcc和鏗鏘爲什麼在MSVC

int poissrand(double lambda){ 
    int k=0; 
    double L=exp(-lambda), p=1; 
    do { 
    ++k; 
    p *= rand()/(double)INT_MAX; 
    } while (p > L); 
    return --k; 
} 

例子here(VC編譯它工作正常)和here(gcc)

+0

呼叫'函數srand(時間(空))'在主循環之前。 – Banex

+0

我忘記在示例中插入srand,但它沒有區別,並且問題被標記爲c,因爲在這種情況下我不能使用C++ – bmanga

+1

也許是因爲在MSVC中'rand()'的範圍是不同的。代碼中沒有'RAND_MAX'。 –

回答

3

在MSVC中,rand()的範圍是不同的。在所有版本中,由RAND_MAXstdlib.h中指定。

如果您乘p值應該是在範圍0..1那麼請嘗試

p *= (double)rand()/RAND_MAX; 
相關問題