dポイントプレゼントキャンペーン実施中!

コンピュータの作る擬似乱数(RND関数など)に規則性があることを表現するために、3次元プロットした図をあげて、規則的な濃淡が現れていることが分かるようになっている書籍を見たことがあります。(書名失念)

自分で再現したくなっていろいろ試したのですが、うまくいきませんでした。同じような結果を出すにはどのようなアルゴリズムでプロットすればいいでしょうか。

A 回答 (3件)

例えばこういうやつですかね?


http://www.soi.wide.ad.jp/class/20010000/slides/ …
http://www.soi.wide.ad.jp/class/20010000/slides/ …

基本的には、その擬似乱数がどのようなアルゴリズムで作られているかによって効果的なプロットの仕方も変わってくると思います。
例えば単純な線形合同法で乱数を生成する場合の欠点(の一つ)は、「a の次に b が出た場合、今度 a が出たときもまたその次に b が出る」というものなので、出てきた乱数の値を二つずつ組にして、それを座標としてプロットしてみるなどすればよいかと思います。
(上に挙げた URL では三つずつ組にして三次元でプロットしていますね)
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘のページの通りです! これはメルセンヌ・ツイスターという乱数発生法が優れていることを示しているわけですね。

試してみたのは MS Excel と 十進BASIC なのですが、それぞれの使用している乱数発生関数のアルゴリズムが分からないこともあるのでしょう、2次元/3次元のどちらを描いても、規則性が視認できませんでした。もしかすると結構優秀な乱数だということになるわけでしょうか。

周期が特定できれば、乱数をいくつごとにプロットさせるかを調整して、同じようなグラフが書けるんですね。

お礼日時:2006/07/10 17:28

>long rand() { x=x*1103515245+12345; return x&2147483647; }


C言語です
BASIC的に書くならば
x = x=x*1103515245+12345
x = x & 2147483647
です
二行目の&は32ビットにするためにマスクしているだけです
(0x7FFF FFFF)

drand48はコインテストをすれば乱数の悪さがわかります

参考URLをどうぞ

参考URL:http://www001.upp.so-net.ne.jp/isaku/rand.html
    • good
    • 0

古典的randなら2次元でも絶対に出ると思います



long rand() { x=x*1103515245+12345; return x&2147483647; }

で試してください

信じられないくらいの乱数の悪さを見ることが出来ます

rand48なんかは周期が長いのでかなり大きいグラフにプロットする必要があるのではと思います
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
> long rand() { x=x*1103515245+12345; return x&2147483647; }
すみません、記載いただいた言語が読めなくて(^^;
後学のために、何て言語で、どういう式なのか、教えていただければ幸いです。

で、締め切らずにいた間、十進BASICのrnd関数で再現できました!
倍率を100倍にしたら、連続する2数の規則性が視認できました。

お礼日時:2006/11/27 22:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!