重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

乱数を生成するソースコードを探しています
rand関数で生成される乱数はよい乱数ではないようで
それ以外でいい乱数を生成する方法はどのようなものがあるのでしょうか

また、実装したソースコードのサンプルがあればWEBページなどを教えていただきたいです

A 回答 (3件)

何に使いたいかというのをまず聞きたいですね。

数値計算用途なら、メルセンヌツイスターをお勧めしますし、暗号用途ならライブラリーを使って簡単にやるならarc4randomそうでないならyarrowをお勧めします。

メルセンヌツイスターは次のページから詳しい情報やソースコードが手に入ります。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …
メルセンヌツイスターはPython、C++0x (予定)、R言語など様々な言語で標準の乱数作成方法として実装されています。

arc4randomはBSD系のOSには標準で入っていますし、そうでない場合もlibbsdなどでインストールできることがあります。これを使えるならこれを使うとよいでしょう。
ソースコードは例えばこんな感じですね。 (arc4と名前に持っているだけあって、opensslのrc4のライブラリを使っています)
http://www.jp.freebsd.org/cgi/cvsweb.cgi/~checko …

arc4randomが使えない環境でお手軽に暗号用途の乱数を作る場合は、メルセンヌツイスターで出た結果のsha1を計算するという方法が提案されています。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ …

yarrowアルゴリズムはFreeBSDの疑似乱数発生デバイスの中で使われているアルゴリズムで、入力エントロピーの品質を評価して安全性が高く、エントロピーを加えなくても長く乱数を発生させることができます。
http://www.schneier.com/yarrow.html

...というわけで、用途に応じて適切なものを選んでみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。大変参考になりました。

お礼日時:2011/11/04 22:10

http://www001.upp.so-net.ne.jp/isaku/rand.html
あたりがいろんな乱数について詳しいです。
    • good
    • 0
この回答へのお礼

ええと、乱数について詳しいとおっしゃってますが、これは単に特定の乱数の普及を促進するための宣伝ではないでしょうか。

お礼日時:2011/11/04 22:10

C++でいいならBoostライブラリにさまざまな生成方法と分布で擬似乱数を生成するrandomが含まれています。



ライブラリ入手先:
http://www.boost.org/
使い方:
http://www.kmonos.net/alang/boost/classes/random …
    • good
    • 0
この回答へのお礼

参考にします。ありがとうございます。

お礼日時:2011/11/04 22:09

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