疑似乱数2

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2007/10/17(水) 22:34:59
擬似乱数発生器について語ろうか。その2

前スレ
擬似乱数
http://pc11.2ch.net/test/read.cgi/tech/1146071975/

関連スレ
【危険】とんでもプログラム告発スレッド【悪質】
http://pc11.2ch.net/test/read.cgi/tech/1191860116/


SIMD-oriented Fast Mersenne Twister (SFMT):
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
2007/10/17(水) 22:53:56
で、いつになったらSFMTはboostに組み込まれるの?
3デフォルトの名無しさん
垢版 |
2007/10/17(水) 23:16:58
俺用メモ

18* 名前:デフォルトの名無しさん [] 投稿日:2006/04/28(金) 23:53:29
軽さで言えば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)) );
}
2007/10/17(水) 23:35:36
>>3
せっかくだからURLも貼っとこう
http://web.comlab.ox.ac.uk/oucl/work/richard.brent/pub/pub218.html
2007/10/17(水) 23:38:04
この手の乱数マジックナンバーでよくでてくる
123456789
なにふざけてるのかと思ってたら、
0.1234567891011121314… って超越数なんだな。
つまり123456789は、その超越数を10億倍して9桁の精度で切り落とした、
そこそこ質のよい数なのであった。
目からウロコ
2007/10/18(木) 00:42:09
マジックナンバーに0xDEADBEEFってよく見る
2007/10/18(木) 01:51:23
SFMTはCPUの機能に最適化させてるメルセンヌツイスタですよね?
boostはテンプレートライブラリだからそれはいつまでたっても組み込まれないと自分は思います…。

2007/10/18(木) 08:32:57
>>7意味不明
97
垢版 |
2007/10/18(木) 10:16:21
C++のテンプレートライブラリとして実装するものなのかなと思っただけです。
2007/10/18(木) 12:38:11
独自の乱数発生器を組み込めるのがboost::randomのよいところ。
手直しは必要だが。

っていうか、boostがテンプレートライブラリだなんて誰が言ってるの?
STLの事じゃなくて?
117=9
垢版 |
2007/10/18(木) 14:19:16
実際違いました…すみません。
boostの一部がSTLに移植されるとか書いてあったの見てたから勘違いかな…。
regexとかはテンプレートライブラリではなかったです。

あと、SFMTの情報斜め読みしてたから勘違いしてしまいました。申し訳ありません。
2007/10/18(木) 19:08:52
RandomはTR1に入った、つまり標準ライブラリ入り内定ではある。

Regexは、テンプレートライブラリと呼ぶかどうかはともかく、
basic_regexなどテンプレートはよく使っている。
2007/10/19(金) 00:54:05
regexがプリコンパイル方式なのは型が最初から決まってるからじゃん。
2007/10/19(金) 09:58:49
Xorshift RNGs

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)) );
}

ttp://lucille.atso-net.jp/wiki/index.php?%CD%F0%BF%F4
2007/10/19(金) 12:51:57
Boost はほとんどテンプレートだけど、
たまにテンプレートじゃないのがあるからな。
16デフォルトの名無しさん
垢版 |
2007/10/23(火) 01:38:55
http://www.nicovideo.jp/watch/sm1331242
歌詞を乱数で生成した歌
2007/10/23(火) 04:40:30
(ax+b) mod M でいいよ…
2007/10/23(火) 05:09:13
MT使え。
いじょ。
終了。
2007/10/23(火) 08:01:20
再開
20デフォルトの名無しさん
垢版 |
2007/10/25(木) 23:12:25
初心者ですみません。

メルセンヌ・ツイスタって、COBOLに移植されてないでしょうか?
MTのページは見たのですがCOBOLはなかったorz
2007/10/25(木) 23:15:18
COBOLで頑張ってもいいとはおもうけど(どっかに実装があるかもしれないけど)、
処理系の、Cの関数を呼び出す機能の利用を検討するのもありと思う
22デフォルトの名無しさん
垢版 |
2007/10/25(木) 23:27:05
>>21
ああ、おっしゃる通りですね。Cならすでにソースあるんだし。
その方向で検討します。ありがとうございました。
2007/10/27(土) 11:24:36
COBOLで乱数が必要なのか?
2007/10/27(土) 12:14:41
使えないとちょっとCOBOL
2007/10/27(土) 19:27:33
コボルと困るを掛けた駄洒落か。なるほど。次の宴会で使おう。
2007/10/28(日) 09:43:23
昔COBOLでなんちゃって正規分布乱数を作ったな

時計の1000分の一秒の値を種にして、中心極限定理を使ったはずだ
COBOLのシステムで何をするかしらんが、この程度で十分じゃねぇの?
2007/10/28(日) 19:36:32
>>25
きっと誰かのビールがCOBOLる
2007/10/28(日) 19:49:41
それは、すCOBOL、きついな。
2007/10/29(月) 00:13:57
XorShiftのk=128では無いバージョン(32,64,96,160,192)について
誰か擬似コードor参考になるURL希望。

ググったが出て来なかった(多分やり方が悪いorz)
2007/11/01(木) 01:20:36
>>29
ttp://www.jstatsoft.org/v08/i14/
ttp://www.iro.umontreal.ca/~lecuyer/myftp/papers/xorshift.pdf
2007/11/02(金) 15:50:53
ド素人なので突っ込みどころがあったら御教授くださいorz
rand()で生成した乱数をバイナリ形式で出力して
NIST SP800-22やdiehardテストに突っ込みたいんですけど・・・

↓のままだとdiehardどころかSP800-22にも引っかかってしまいます
#include <stdio.h>
#include <stdlib.h> // rand, srand使用
#include <time.h> // time使用
#define size 12000000 //bit列の長さ定義

2007/11/02(金) 15:52:35
main()
{
FILE *outputfile; // 出力ストリーム
unsigned long int m,i=0;
char bit[size];
srand((unsigned) time(NULL)); // time関数からシードをセット
outputfile = fopen("bit.dat", "w"); // ファイルを書き込み用にオープン
if (outputfile == NULL) { // オープンに失敗した場合
printf("cannot open\n"); // エラーメッセージを出して
exit(1); // 異常終了
}
for(i=0; i<size-1; i++){ // 乱数を発生させ剰余を計算
m=rand()%0xffff;
bit[i]=m;
}
fwrite(&bit,size,1,outputfile); //バイナリの書き込み
fclose(outputfile); // ファイルをクローズ
return 0;
}

↓公式ページ
NIST ttp://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html
diehard ttp://stat.fsu.edu/pub/diehard/
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況