From: gotoken@... (GOTO Kentaro) Date: 1999-05-17T15:15:45+09:00 Subject: [ruby-dev:6854] rand, random, drand48 (Re: {0,2}(regex.c), ...) In message "[ruby-dev:6849] Re: {0,2}(regex.c), nonzero?(numeric.c), random" on 99/05/17, Akira Endo writes: >man randしたら、分母は +1 してくれ、と書いてありました。 >でも、drand48は、知りませんでした。知らないことが多過ぎるよう >ですので、しばらく知識を増やす予定です。 ええと rand() と drand48() は線形合同法で、random() は FSR (feedback shift register) です。 FSR は M系列乱数と も呼ばれます。 線形合同法は初期値によって周期が異なるのに対し、ある原始 多項式に基づく FSR は本質的に1つの系列なので初期値によら ず周期が決まっていますが初期値の取り方が十分離れていれば 高次モーメントの性質も良いとされています。 rand() はとくに LSB に近いビットが短い周期を持つことで嫌 われます。 drand48() は法を大きく(2**48)とることでこれを 改善しています。random() はこれらに比べ非常に長い周期を 持ちますが、やや遅いはずです。 BSD などには、/dev/random というのもあります。これは物理 乱数なので暗号の鍵など疑似乱数では困る場合に有効です。 -- gotoken