質問: > > http://ysklog.net/java/4-15.html > > 上記の参考サイトの > > 「0~3の整数」を生成するには、「0~4未満の実数」を以下のように作成し、 > > Math.random()*4; > > これをint型にキャストすればよい。 > > (int)(Math.random()*4); > > > という個所を見て思ったのですが、 これはMath.Random()で0.0<1.0のランダムな数値をとって、 こいつを4倍し、少数点以下を切り捨てるという処理だと思うのですが、 桁が上がった場合、単純に Math.radom()*60000; これをint型にキャストすればよい。 (int)(Math.random()*60000)ってことになるわけもないですよね。 「0~60000の整数」を生成するための、「0~60000未満の実数」を作成したい場合どうすればよいでしょうか。 お願いします。
回答: 出来る限り品質のよい乱数を得るには、java.util.Randomを使うことはおすすめしません。 SecureRandomというクラスもありますが、これは生成される乱数の品質が良い代わりに超遅いです。 ゲーム製作などの現場では、出来る限り品質の高い、かつ計算速度が速い、かつ同シード値から同一の乱数配列が取れる乱数生成方法としてメルセンヌ・ツイスタがよく挙げられます。しかし、Javaの標準機能にメルセンヌ・ツイスタを使ったクラスは存在しないため、なんらかの外部ライブラリを使うか、自分でメルセンヌ・ツイスタを使った乱数生成コードを実装する必要があります。 【乱数の偏りについての参考記事】 【メルセンヌ・ツイスタのJava実装の一例】 ※ソースコードは中ほどのMTRandom.javaというリンク