Created
August 19, 2010 05:51
-
-
Save gfx/537150 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Perlの乱数についてIRCで盛り上がったのでまとめておく。 | |
| 結論からいうと、srand()はPerl5組み込みのものでよい。乱数の生成はMath::Random::MTがよいとおもう。 | |
| Perlのrand()の実装はConfigure時に選べるようだが((perl -V:randfunc でかくにんできる))、ふつうはdrand48()がつかわれる。これは下位ビットがまったくランダムでないことで知られるrand(3)よりはましだが、しょせん線形合同法なのでセッションIDなどを作るのには安全ではない。安全な乱数を作るためにtime()やSHA1を混ぜ込んだりするほうほうもよくつかわれるが、そのくらいならはじめからM::R::MTを使ったほうがいいとおもう。 | |
| なお、srand()はあれば/dev/urandomを読むので、自前でsrand(time)などとするのはよくない。また、最初にrand()を呼ぶときに自動的に呼ばれるので、ふつうは明示的によぶひつようすらない。ただし、どこかでrand()してからfork(2)をすると、サブプロセスで乱数系列がすべておなじになってしまうので注意がひつようである。 | |
| id:kazuho++ id:sfujiwara++ | |
| 参考文献: | |
| - http://wellington.pm.org/archive/200704/randomness/index.html#slide0 | |
| - Perl_seed()@util.c, pp_rand()@pp.c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment