C言語で乱数生成
tetsuhon
tetsuhon
ATOMRSS
  • コード求むID: 152
  • 登録日時:  2007/10/12 18:08
  • 最終更新日時: 2007/10/15 08:13
  • アクセス数: 4062
  • タグ:  c 乱数
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

C言語で乱数を生成させるときは、そんなに凝らないなら
srand関数にtime関数で現在時刻をシードにして
rand関数を呼ぶと思います。

ですが、これだと同じ1秒の間ではtime関数は同じ値しか
返さないので、同じ乱数列が生成されてしまいます。


できればWindowsの場合とLinuxの場合で書き換えないで済む
方法の方がありがたいのですが、いい方法はありませんか?

コメント

  • ゲスト
  • 1:ゲスト
  • 2007/10/12 18:17

gettimeofdayやftimeでミリ秒とってはどうでしょう。

  • GoodJob
  • 0

こんな関数があるんですね!知りませんでした。
さっそくこれを使ってみたいと思います。
ありがとうございました。

  • GoodJob
  • 0

  • ゲスト
  • 3:ゲスト
  • 2007/10/12 21:53

boost::random 

高精度乱数関数がそろっていてよいですよ。

でも C++ となってしまいますが...

こちらで紹介されてます。
http://www.kmonos.net/alang/boost/classes/random.html


  • GoodJob
  • 0

なるほど、こんなものもあるんですね。
今回は簡単にftimeで対応しましたが、精度が必要な時は
使えそうですね。参考になります。

  • GoodJob
  • 0

  • ゲスト
  • 5:ゲスト
  • 2007/10/13 10:30

前回の結果を保存しておいて、time関数の結果に足すとかxorするとかなら、
ミリ秒以下でも対応できるのでは。

  • GoodJob
  • 0

  • riz
  • 6:riz
  • 2007/10/15 08:13

擬似乱数生成器でしたらXorShiftというものがあります。

unsigned long xor128(){
  static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;
  unsigned long t;
  t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント