2016-10-13 8 views
0

Java Diehard Randomness Test Suite(https://sourceforge.net/projects/jrandtest/)のPRNGを使用しています。すべてのアルゴリズムは、乱数を取得するための3つの方法があります:AESアルゴリズムの迅速なループを実行PRNGの結果を最大最小範囲に合わせる

readByte() 
readInt() 
readLong() 

は、これらの番号を生成:

Byte: -102 
Int: -252497821 
Long: 5882262596119081845 
Byte: -68 
Int: 1688727157 
Long: 436050817787325007 

私は0から36の範囲で整数の乱数を生成する必要があります(包括的)。どのクラスも、Random()とSecureRandom()が持つnextInt(int bound)に似たメソッドを持っていません。私がPRNGから得た数字を私が必要とする範囲に収めるには?ありがとう!

答えて

0

純粋なアプローチは、readInt() % myMaxValueの結果を取ることですが、生成された値の最下位ビット(エントロピーが最も低い)が使用されるため、歪み分布が生じることになります。

Random.nextInt(int)の仕様を読んで、どのように回避するのかを理解してください。そしてもちろん、the source of openjdkがあります。あなたはインスピレーションを得ることができます。

+0

はgrepcodeを読むことに関して同じことをちょうど言っていて、実装に適応しようとしました –

関連する問題