2011-01-12 15 views
2

は現在、私は非常に高速XorShiftアルゴリズムを使用しています:乱数生成のための高速モジュロ置換は何ですか?

inline uint r() { 
    static uint y = 2463534242u; // seed 
    y ^= (y<<13); 
    y ^= (y>>17); 
    y ^= (y<<5); 
    return y; 
} 

は、今私は)区間[0、n個の整数を生成したいです。もちろん、私はこれを行うことができます:

r() % n 

これは遅いです。より速い方法がありますか?

PS 間隔の異なる数の確率の小さな不等式が許容されます。このリンクは、ビット単位のマスクを使用してモジュラス行う方法について説明し

+1

'r'機能をxorshiftかなりhttp://xkcd.com/221/のように見えます。 – user562374

+0

どのようにゆっくりと定義しますか? DIV命令はこれに使用することができ、最新のx86(i7)では26クロックサイクル、Core2では40クロックで実行されます。 –

+0

これはまだr()に必要なクロックサイクルと比較されます。 –

答えて

関連する問題