- 1 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 02:19:35 ]
- 擬似乱数発生器について語ろうか。
- 431 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:11:06 ]
- いや、内部ステートをスレッド毎に持つというのは
確かに複数スレッドからの同時アクセスの点では良いのだが 例えばよく使われるsrand()はどうするのか。 スレッド毎にsrand()を呼ぶのか あるいはsrand()の内部でスレッドを数え上げるのか srand(time(NULL))の後にスレッドを作成したらどうなるのか ↑を最初に一度だけ呼んである過去のコードの扱いはどうなるのか 等々、面倒くさいことがありすぎるよ。 まともなコードで、srand()を呼ばずにrand()を使っているものがあるとは思えないし。 もちろん、「標準のrand()」を置き換えるのではなく 「自分で使う乱数生成器」をどうするか、という話なら 好きなようにどうぞ、というだけだけど。
- 432 名前:・∀・)っ-○◎● mailto:sage [2007/07/13(金) 03:11:46 ]
- そりゃ各スレッド毎にパラメータがあるわけだから、それぞれに初期化が必要になるだろうね。
種は現在時間+スレッドID+GUID/UUID+HDDシークタイムからとった自然乱数もどき+・・・・ 見たいな感じでいろいろ組み合わせればよくね? 最近のMTの派生実装は種を配列で与えることができるんで、ユニークな乱数列になるように なるべく多くのパラメータを与えるといい。 MTは種さえ被らせなきゃそこそこうまくバラけてくれる。
- 433 名前:デフォルトの名無しさん [2007/07/13(金) 08:20:03 ]
- CryptGenRandは?
- 434 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 09:29:57 ]
- そういう話かよ?
- 435 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 12:42:16 ]
- ワークメモリがスレッド毎に独立してると、たとえばモンテカルロみたいなのを複数スレッドで分割処理やりたいときに有用。
プロセスを分ければいいと言われると返す言葉がないがね。
- 436 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 22:15:41 ]
- >>386 亀レス
double win_rand2(HCRYPTPROV hProv){BYTE b[4];CryptGenRandom(hProv, 4, b); return (double)(b[0]+(b[1]<<8)+(b[2]<<16)+((b[3]&127)<<24))/2147483648;} n=0.0;t=clock();HCRYPTPROV hProv;CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0); for(i=0;i<kaisu;i++){x=win_rand2(hProv);y=win_rand2(hProv);if(x*x+y*y<=1.0)n+=1;} CryptReleaseContext(hProv, 0); printf(" winのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
- 437 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:40:05 ]
- CryptGenRandomって自分じゃジェネレートしてないのに、なんでGenRandomなんだ?
GetRandomじゃないのか?
- 438 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:01:44 ]
- その Gen は Generate ではなく、元、つまり集合の1要素だって
おじいちゃんがゆってた。
- 439 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:24:49 ]
- 「源」じゃないの?
すなわち「おじいちゃんの名前(ゲンじいちゃん)」 え?ちがう?
- 440 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:29:36 ]
- ララ… わしゃ悔しいわい
- 441 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 14:32:34 ]
- アゴなしの人か。
- 442 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:22:22 ]
- DDAで円の軌跡を計算して、それを2重にして乱数作ったんだが、
擬似乱数として性能がいいのか調べる方法はある?1から10までの分布は それらしくなっているんだけどな。
- 443 名前:・∀・)っ-○◎● mailto:sage [2007/07/19(木) 23:57:25 ]
- だんごやさんはSSE2用sfmtをboostに移植しようとしたがテンプレート地獄に涙目
- 444 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:54:11 ]
- ビット毎の出現確率でも調べたら?
- 445 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 07:35:38 ]
- >>442
どっかに基準とはる判定方法があったかも
- 446 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 09:09:19 ]
- とりあえず、こんなのは見つかった。
DieHarder: A Random Number Test Suite Robert G. Brown's General Tools Page www.phy.duke.edu/~rgb/General/dieharder.php
- 447 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 19:11:11 ]
- >>446
乱数検定の定番だな
- 448 名前:デフォルトの名無しさん [2007/08/15(水) 00:44:29 ]
- いろんな圧縮アルゴリズムにかけて
圧縮率を見るのってどうなの? 邪道?
|

|