- - PR -
指定した範囲の乱数
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-18 13:14
java初心者です。
指定した範囲の乱数を取得する方法って、どうすればできますか? Mathクラスのrandom()メソッドを使ってするのですか? 教えてください。よろしくお願いします。 | ||||||||
|
投稿日時: 2005-11-18 13:28
できますよ。
というか、ベンダーから便利なユーティリティークラスが提供されるまでは、 みんな、自分で「0.0以上1.0未満」の乱数を、目的の数値に変換するコードを 書いてたんですよねえ・・・。 こういうことは、自分でもできた方がいいと思う。 以下のようなものもあります。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Random.html | ||||||||
|
投稿日時: 2005-11-18 13:37
ありがとうございました。
大変助かりました!! | ||||||||
|
投稿日時: 2005-11-18 13:45
Google(「java」「乱数」での検索結果)
http://www.google.co.jp/search?hl=ja&q=java+%E4%B9%B1%E6%95%B0&lr= 私が検索した際に最上位に表示されたページ http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Random.html 多分、正数の話だと思うので、ページ内アンカ http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Random.html#nextInt() ところで、そのページ内の記述より
なので http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Math.html#random() 以上で普通は大丈夫だと思いますが、もうちょっと詳しく書くと http://www.atmarkit.co.jp/fjava/rensai2/jspservlet07/jspsevlet07_3.html 内、「ロジックの概要」より
説明の中で出てくるroundやfloorに関しては、適宜追いかけてください。 もうちょっと突っ込んだところに行くと http://cwoweb2.bai.ne.jp/~jgb11101/files/random/mersenne_applet.html というような話もあるようです。 --- とか、だらだら書いていたら、すでにEdossonさんから簡潔な返答が出て解決済みだった…… | ||||||||
|
投稿日時: 2005-11-18 14:01
http://www001.upp.so-net.ne.jp/isaku/rand.html
に詳しく書かれていますが、Javaの乱数は、実はバグがあって 初回の数値には偏りがあるので、二回目以降の値を使った方がいいです。(たぶん) | ||||||||
|
投稿日時: 2005-11-18 15:38
試してみました。 種の値が近いと、直後の値も似たような値が出てきました。 1回目の値は捨てた方がよさそうです。 | ||||||||
|
投稿日時: 2005-11-18 17:37
参考に。
Javaでは線形合同法という乱数を作成する方法が採用されています。 線形合同法は R = (A × 種 + C) mod P という計算のやり方で乱数を作っています。 線形合同法はあまりよい乱数が作成できません。 その理由は周期が存在するからです。 分かりやすい例を示すために以下のようにおきます。 A=3、C=0、P=7、種=5 R0 = (3×5+0) mod 7 = 15 mod 7 = 1 したがってR0 =1 次からは種の部分に前の値がきます。つまりR0が種の値となります。 R1 =(3×1+0) mod 7 =3 mod 7 =3 したがってR1 =3 R2 =(3×3+0) mod 7 =9 mod 7 =2 R3 =(3×2+0) mod 7 = 6 mod 7 =6 R4 =(3×6+0) mod 7 =18 mod 7 =4 R5 =(3×4+0) mod 7 =12 mod 7 =5 R6 =(3×5+0) mod 7 =15 mod 7 =1 R7 =(3×1+0) mod 7 =3 mod 7 =3 R8 = 2 R9 = 6..........と{1,3,2,6,4,5,1,3,2,6,4,5...........}の繰り返しがでてしまいます。 もし乱数に興味をもったら参考にこの本を読んでみるといいと思います。 こちらの本は大変な良書だと思います。 http://www.hyuki.com/cr/ 上の書物は具体的な設計図(アルゴリズム)が記載されていないのでもっと詳しい本はこちらになります。 http://www.amazon.co.jp/exec/obidos/ASIN/4797319119/249-2416039-9161930 またMathクラスを使うよりはRandomクラスを使ったほうがよりプログラムを作成しやすくなります。 もしソースコードをご希望なら書き込みますので言って下さい。p(^_^)q |
1