No.4
- 回答日時:
Fotran なので多少異なる場合があります。
多分 32ビットの符号付整数を16ビット符号付整数で割るという一般的ルーチンを使っていると思います。
3次元ですとたしか13面に収束するのでちょっと面倒ですが。
この擬似乱数プログラム(乱数の入門ですからどこかに有るかと思います)を探してきて.組込み関数を使わずに個別のルーチンとして使うのが簡単な方法化と思います。
なお.確実な擬似らん数は.外部配列にテーブルを作り.組込み関数でかき混ぜるのがなんと言っても楽です。周期を自分で管理できますから。
モンテカルロでちょっと遊んだときに目いっぱい苦しんだのが乱数の周期性です。少しならばなんとでもなるのですが.ある程度大きくなると周期性とかたよりが出てしまって苦しみます。通常無限大に発散させれば偏りが消えることにはなっていますが.実数で偏りを除くのに苦労しました。
No.3
- 回答日時:
どの環境でプログラミングしておられますか?
超高速で複数のsrandをする場合はこの方法ではダメかもしれませんが、
Win32で作っているならば
GetLocalTime()等のAPIを使って
ミリ秒を取得し、それを使って乱数を初期化すれば良いと思います。
もっとシビアなタイミングに対応するならば
環境は限られてくるかもしれませんが、
QueryPerformanceCounter()APIを使うと
ミリ秒よりも高精度な値が取れます。
No.2
- 回答日時:
お使いの環境に乱数装置が実装されていないか調べてみるといいかもしれません。
FreeBSDにはsrandomdev() という乱数装置を利用した乱数系列初期化ルーチンとrandom()という比較的高精度な32bit乱数が実装されています。
この乱数はsrand()/rand()より3割ほど遅いが乱数の精度はずっとよいものです。
#1氏がツッこんでいる「生成されるたびに」ということですが、毎回srandするのではなく、例えばCGIで、複数のプロセスが独立に起動されることを想定しているのでしょうか。
その場合でしたら、共有メモリにカウンタを用意するとか、プロセスid(などのプロセスに固有の値)+time(NULL)をキーにするなどすれば、よいのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VBからのACCESSの起動...
-
特定ユーザーのプロセス情報を...
-
VBAで別プロセスのExcelのフル...
-
フレームワークとプロセスの違...
-
C言語 特定のプロセスの終了を...
-
C++のプログラムをバックグラウ...
-
Linuxでのスレッド間メッセージ...
-
Fire foxを閉じると開けなくな...
-
VB.NETで起動したExcelの閉じ方...
-
別のプロセスの関数を呼び出す...
-
Visual C++からpingを実行して...
-
ShellExecuteが起動したプロセ...
-
conime.exeってウイルスですか?
-
Windowsのユーザログイン/ログ...
-
VB.NET 自プログラムのプロセス...
-
実行中のプログラムIDが取得...
-
怪しいプロセス教えてください。
-
OSPFでプロセスを分ける意義に...
-
変数のアドレスの値
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
プロセスIDからウィンドウハ...
-
C#でのbatファイル実行結果取得
-
非表示になったエクセルは?
-
C++のプログラムをバックグラウ...
-
VB6.0 SHELLで起動...
-
怪しいプロセス教えてください。
-
ADOでアクセスのレコードに...
-
Process.Startの戻り値を後で取得
-
プロセスIDの取得方法について
-
Linuxでのスレッド間メッセージ...
-
API関数 GetExitCodeProcess
-
OSPFでプロセスを分ける意義に...
-
C++でシェルを起動
-
別のプロセスの関数を呼び出す...
-
c言語でプロセスIDを調べたい
-
共有メモリの同時アクセスにつ...
おすすめ情報