水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 乱数もののけ

乱数もののけ

2002年1月8日(火曜日)

乱数もののけ

互いに独立してランダムの意味がわかりません。

以上、http://rryu.sakura.ne.jp/nisenise-fuhito/200201.html#2002-01-06 より

考えられる意味としては、単に「両者は同じ乱数系列に属するので、最初に得られた値から次の値を推測することができる」とかその辺でしょう。その辺がどうしても気になる場合は、time か何かを使って求めた回数分 rand を実行してみるとか、そんな方法があります。PGP の公開鍵を作るときにテキトーにキーを押すことを求められたりしますが、キーストロークの時間を計って似たようなことをやっているのだと思います。ってこのへんはむしろ TOM neko さん宛ですが。

ちなみにその前に ZnZ さんが言っているのは、わざわざ srand(time|$$) とか書くのが何のためなのかサッパリ分からない、ということだと思われます。$$ との or を取ることによって、試行ごとに違う乱数系列が採用される確率はむしろ低下してしまっています (たとえば time の下五桁が 00001 で $$ が 1110 のときと、time の下五桁が 11110 で $$ が 1111 のとき、or 合成の結果を取ると両者は同じになってしまう)。素直に srand(time) の方が良い気がしますし、Perl5.004 以降では srand せずに rand() を使うと初回に自動的に srand(time) してくれるようになっているので、書かないほうがマシではないかという話です。

or のかわりに xor を使うのはどうよ? でも、Perl での xor の取り方なんて知りませんが(無責任)。

以上、http://h203236.ppp.asahi-net.or.jp:10080/diary#y2002m01d08t02 より

xor を取るには time^$$ とします。が、これもやはり time と $$ の値によっては同じ値になってしまいます。こちらについては、perldoc に

Frequently called programs (like CGI scripts) that simply use

time ^ $$

for a seed can fall prey to the mathematical property that

a^b == (a+1)^(b+1)

one-third of the time. So don't do that.

などと書かれていたりして。

関連する話題: もののけ / りゅうさん / ZnZさん / TOM nekoさん / Perl

最近の日記

関わった本など