- ベストアンサー
乱数について
javaで使用可能な乱数にはMath.random()などがあります。その他にもあると思うのですが、なぜ一つの関数だけでないのですか?Math.random()にはなにか周期性や特徴みたいなものはあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Math.randomメソッドの説明に下記の記述があります。 >最初にこのメソッドが呼び出されたときに、メソッドは単 >一の新しい擬似乱数発生関数を作成します。これは、式 >new java.util.Random >とまったく同じです。作成された擬似乱数発生関数は、以 >後このメソッドへのすべての呼び出しに使われます。 上記を簡略すると「1つの擬似乱数発生関数を使い回すよ」 という事ですね(Math.random()の場合は) 対して、java.util.Randomクラスは「newで新たにインスタンス を作れば、その分だけ独立した擬似乱数発生関数を使えるよ」 ということでしょう。 アルゴリズム等の難しい違いは分かりませんが、只単に乱数が 欲しいだけならばMath.random()を使って構わないはずです。 >ほとんどのアプリケーションでは、クラス Math の >random メソッドを使う方が簡単です。 胴元のSunが上のような説明をしてますから(笑 このメソッド(random())が何故Mathクラスにあるのかですが、 まぁ深い意味はないでしょうね、単なる思いつき程度だと思います。 別段、Randomクラスのクラスメソッドだって構わないはずなんです けど、Mathクラスには擬似乱数の関数に使われる関数が多くある からとかその辺あたりが理由かなぁ。。 まぁ、それでも理由らしきものを思い浮かべられるだけでも良い ほうで、私の中での最大の謎「System.arraycopy()」に比べれば 可愛いものではないかと(・・しかし、なぜこんな所に・・w
その他の回答 (1)
Math.random は java.util.Random をラップしてるだけみたいですね。 > Math.random()にはなにか周期性や特徴みたいなものはあるのでしょうか? java.util.Random の仕様を読むと,線形合同法を使うと言っていますから, 性質はあまり良くないです。 周期性は,擬似乱数である以上必ずあります。 アルゴリズムによって周期が長い,短い,の違いはありますが。 より性質の良い擬似乱数が必要でしたら, 参考 URL を参照してください。
お礼
擬似乱数、線形合同法などよくわからないので調べてみます。ありがとうございました!
お礼
丁寧な回答ありがとうございます^^もう少し調べてみて規則性などないか探してみたいと思います。