2017-01-28 7 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関数(時間(null)を)'してみてください。 – Banex

+0

この例ではsrandを挿入するのを忘れましたが、違いはありません。この場合はC++を使用できないので、質問にタグが付けられます – bmanga

+1

おそらくMSVCでは 'rand()'の範囲が異なります。コードには 'RAND_MAX'はありません。 –

答えて

3

rand()の範囲は異なります。すべてのバージョンでがstdlib.hに指定されています。

あなたがでpを掛けた値が範囲0..1にすることになっている場合は、ループの前にメインで

p *= (double)rand()/RAND_MAX; 
関連する問題