[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 13:23 / Filesize : 68 KB / Number-of Response : 258
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

疑似乱数2



1 名前:デフォルトの名無しさん [2007/10/17(水) 22:34:59 ]
擬似乱数発生器について語ろうか。その2

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

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


SIMD-oriented Fast Mersenne Twister (SFMT):
www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html


2 名前:デフォルトの名無しさん mailto:sage [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)) );
}


4 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:35:36 ]
>>3
せっかくだからURLも貼っとこう
web.comlab.ox.ac.uk/oucl/work/richard.brent/pub/pub218.html

5 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:38:04 ]
この手の乱数マジックナンバーでよくでてくる
123456789
なにふざけてるのかと思ってたら、
0.1234567891011121314… って超越数なんだな。
つまり123456789は、その超越数を10億倍して9桁の精度で切り落とした、
そこそこ質のよい数なのであった。
目からウロコ

6 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/10/18(木) 00:42:09 ]
マジックナンバーに0xDEADBEEFってよく見る

7 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:51:23 ]
SFMTはCPUの機能に最適化させてるメルセンヌツイスタですよね?
boostはテンプレートライブラリだからそれはいつまでたっても組み込まれないと自分は思います…。



8 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:32:57 ]
>>7意味不明

9 名前:7 mailto:sage [2007/10/18(木) 10:16:21 ]
C++のテンプレートライブラリとして実装するものなのかなと思っただけです。


10 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 12:38:11 ]
独自の乱数発生器を組み込めるのがboost::randomのよいところ。
手直しは必要だが。

っていうか、boostがテンプレートライブラリだなんて誰が言ってるの?
STLの事じゃなくて?



11 名前:7=9 mailto:sage [2007/10/18(木) 14:19:16 ]
実際違いました…すみません。
boostの一部がSTLに移植されるとか書いてあったの見てたから勘違いかな…。
regexとかはテンプレートライブラリではなかったです。

あと、SFMTの情報斜め読みしてたから勘違いしてしまいました。申し訳ありません。


12 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:08:52 ]
RandomはTR1に入った、つまり標準ライブラリ入り内定ではある。

Regexは、テンプレートライブラリと呼ぶかどうかはともかく、
basic_regexなどテンプレートはよく使っている。

13 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/10/19(金) 00:54:05 ]
regexがプリコンパイル方式なのは型が最初から決まってるからじゃん。

14 名前:デフォルトの名無しさん mailto:sage [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

15 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:51:57 ]
Boost はほとんどテンプレートだけど、
たまにテンプレートじゃないのがあるからな。

16 名前:デフォルトの名無しさん [2007/10/23(火) 01:38:55 ]
www.nicovideo.jp/watch/sm1331242
歌詞を乱数で生成した歌

17 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 04:40:30 ]
(ax+b) mod M でいいよ…

18 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 05:09:13 ]
MT使え。
いじょ。
終了。

19 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 08:01:20 ]
再開

20 名前:デフォルトの名無しさん [2007/10/25(木) 23:12:25 ]
初心者ですみません。

メルセンヌ・ツイスタって、COBOLに移植されてないでしょうか?
MTのページは見たのですがCOBOLはなかったorz



21 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:15:18 ]
COBOLで頑張ってもいいとはおもうけど(どっかに実装があるかもしれないけど)、
処理系の、Cの関数を呼び出す機能の利用を検討するのもありと思う

22 名前:デフォルトの名無しさん [2007/10/25(木) 23:27:05 ]
>>21
ああ、おっしゃる通りですね。Cならすでにソースあるんだし。
その方向で検討します。ありがとうございました。

23 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:24:36 ]
COBOLで乱数が必要なのか?

24 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:14:41 ]
使えないとちょっとCOBOL

25 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:27:33 ]
コボルと困るを掛けた駄洒落か。なるほど。次の宴会で使おう。

26 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 09:43:23 ]
昔COBOLでなんちゃって正規分布乱数を作ったな

時計の1000分の一秒の値を種にして、中心極限定理を使ったはずだ
COBOLのシステムで何をするかしらんが、この程度で十分じゃねぇの?

27 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:36:32 ]
>>25
きっと誰かのビールがCOBOLる

28 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:49:41 ]
それは、すCOBOL、きついな。

29 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:13:57 ]
XorShiftのk=128では無いバージョン(32,64,96,160,192)について
誰か擬似コードor参考になるURL希望。

ググったが出て来なかった(多分やり方が悪いorz)

30 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 01:20:36 ]
>>29
ttp://www.jstatsoft.org/v08/i14/
ttp://www.iro.umontreal.ca/~lecuyer/myftp/papers/xorshift.pdf



31 名前:デフォルトの名無しさん mailto:sage [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列の長さ定義



32 名前:デフォルトの名無しさん mailto:sage [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/

33 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:37:01 ]
>>31
rand()は乱数としての性質があまりよろしくないという
当たり前のことを文句言われてもどうかと。

34 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 12:45:15 ]
>>32

> rand()%0xffff

一般論として、
剰余を取っても良質な疑似乱数列となっていることが保証されている
乱数生成系でない場合は、剰余ではなく商を取って一定の範囲に
切り詰めるべき。

歴史的に、システムのデフォルトの乱数生成系は品質の悪いものが
多いので、良い疑似乱数が必要なら、マニュアル等で良質な
乱数生成系を使っていることが確認できなければ、デフォルトの
生成系は使うべきでない。

35 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:26:32 ]
そんなのどうでもいいじゃん
だからまあ普通はラッパーかけて開発中はrand使って
あとで精度ほしくなったら差し替えるように作るわけだが

36 名前:31 mailto:sage [2007/11/03(土) 23:00:03 ]
>>33-35
早速の返答ありがとうございます。
色々とマヌケな勘違いをしていましたorz

rand()は「暗号用乱数に相応しくない乱数」の一例として示すために用いました。
剰余をとったのは、良質なRNGならば下位bitの乱数性もまた良質だろう
ということを逆説的に示すためです。

NISTに同梱されている線形合同法のRNGはテストをパスし、
逆に上記のプログラムで生成した乱数列は全く話にならなかったので、
バイナリへの変換の仕方がマズかったのかと思っていました。

NISTは線形合同法くらいなら通ってしまうと聞いたので
てっきりrand()でもイケるものだと…orz

37 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 05:32:17 ]
>>36
実行はできてるんだね。
オレの環境だと>>31-32のコードは動かないんだけど。
# 原因はスタックに置くには配列サイズがでかすぎることみたいだけど。

乱数の質に絡みそうな部分というと型の選択がまずいんじゃね?
charじゃなくてunsigned charの配列にしたらどう?
それと剰余が違うんじゃね?
rand()%0xffff → rand()&0xffff でしょ。
あとループの回数も一回少ないと思う。

38 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:14:18 ]
RAND__MAXと0xffffってどっちが大きいか知ってる?

39 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:14:12 ]
RAND_MAXの値は実装にもよるかと。

そんなことより、rand()%0xffff → rand()&0xffff  ←こいつに誰か突っ込まんのか。

40 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:27:10 ]
うん



41 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:39:02 ]
そんなことよりxorshiftの話しよーぜ

42 名前:デフォルトの名無しさん [2007/11/11(日) 19:11:45 ]
unsigned long xor32(){
static unsigned long y=2463534242;
yˆ=(y<<13);y=(y>>17);return (yˆ=(y<<5));}

unsigned long long xor64(){
static unsigned long long x=88172645463325252LL;
xˆ=(x<<13);xˆ=(x>>7);return(xˆ=(x<<17));}

unsigned long xor96(){
static unsigned long x=123456789,y=362436069,z=521288629;unsigned long t;
t=(xˆ(x<<20))ˆ(yˆ(y>>11))ˆ(zˆ(z<<27))ˆ(wˆ(w>>6));x=y;y=z;z=w;return(w=t);}

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

unsigned long xor160(){
static unsigned long x=123456789,y=362436069,z=521288629,w=88675123,v=5783321;unsigned long t;
t=(xˆ(x>>7));x=y;y=z;z=w;w=v;return v=(vˆ(v>>6))ˆ(tˆ(t>>13));}

unsigned long xor192(){
static unsigned long x=123456789,y=362436069,z=521288629,w=88675123,v=5783321,d=6615241;unsigned long t;
t=(xˆ(x>>2));x=y;y=z;z=w;w=v;v=(vˆ(v<<4))ˆ(tˆ(t<<1));return(d+=362437)+v;}
こんな具合か

43 名前:42 mailto:sage [2007/11/11(日) 19:16:33 ]
コピペ丸張りで色々とおかしくなってることに気付く。
後悔はしていない。

44 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:03:25 ]
>>40
意味とランダム度が全然違うだろ。

45 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:05:36 ]
>>42
これってsrand()に相当する関数は自作しなきゃいかんよね?

46 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 04:38:48 ]
>>45
srand_xor(int hoge)
{
extern static int x;
x=hoge;
}
これでいいんとちゃう?ん?staticはexternできなかったっけ?

47 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 08:50:49 ]
>>46
アホかい。

48 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:51:10 ]
分からなかったらとりあえずクラス化→private属性のクラス内変数で(ry

49 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:27:42 ]
あるシードを使うと、得られる乱数を繋げたバイナリが
偶然たまたま 迷走Mind.mp3 として読めるような
乱数ジェネレータを作ったら どうだろうか。

50 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:44:09 ]
確率的にありえない



51 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:09:54 ]
意図的に作るんなら偶然じゃないな

52 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:27:25 ]
PSG

53 名前:デフォルトの名無しさん [2007/11/17(土) 05:19:51 ]
>>42 には間違いがあるので注意

54 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 05:24:13 ]
訂正したコードを示した方が有用なレスになると思うよ。

55 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 19:12:39 ]
>>42

unsigned long xor32(){
static unsigned long y=2463534242;
y?=(y<<13);y=(y>>17);return (y?=(y<<5));}

の y=(y>>17) は y^=(y>>17) とすべき


56 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 13:04:45 ]
XORってライブラリ化してないの?

57 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/01/07(月) 00:17:55 ]
めぼしいのはBoost.Randomにある

58 名前:デフォルトの名無しさん [2008/01/07(月) 12:16:11 ]
団子あげ

59 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 16:23:59 ]
MTの別実装を作ってみました。
ttp://mt-lite.sourceforge.net/index.html.ja

基本のアルゴリズムはいじらず実装だけを作ったもので、
メモリ節約・リアルタイム性・スレッドセーフなどに一通り配慮したつもりです。

mt19937ar・SFMT・WELL・Xorshiftなどとの比較評価はこのあたりに:
ttp://mt-lite.sourceforge.net/doc/ja/evaluation.summary.html


60 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:05:03 ]




61 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/01/14(月) 01:28:22 ]
SFMTのスレッドセーフ実装なら京大の人のページにあったぞ。SSE2だけだけど。

62 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:48:05 ]
XorShiftをseed使えるようにする場合、どうすればいいかな?<何度もブン回す以外で

63 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 04:04:29 ]
web.comlab.ox.ac.uk/oucl/work/richard.brent/random.html

64 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:24:18 ]
>>63
thx

65 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:52:52 ]
/* xor128()をSSE2で実装してみました。XorShift は SIMD に向かない事がわかりました。*/
#include <stdio.h>
#include <time.h>
#include <emmintrin.h>
unsigned long xor128(void){
static unsigned long x=123456789UL,y=362436069UL,z=521288629UL,w=88675123UL;
unsigned long t;t=(x^(x<<11));x=y;y=z;z=w;return(w=(w^(w>>19))^(t^(t>>8)));}

unsigned long xor128sse2(void){
static union{unsigned long v[4];__m128i m;}u={123456789UL,362436069UL,521288629UL,88675123UL};
__m128i x=u.m, w, t, r; r=_mm_slli_epi32(x,11);t=_mm_xor_si128(x,r); w=_mm_srli_si128(x,12);
x=_mm_srli_si128(x,4); r=_mm_srli_epi32(w,19);w=_mm_xor_si128(w,r); r=_mm_srli_epi32(t,8);
t=_mm_xor_si128(t,r); w=_mm_xor_si128(w,t); r=_mm_slli_si128(w,12);x=_mm_or_si128(x,r);
_mm_store_si128(&u.m,x);return(u.v[3]);}

void main(void){long i,c;
for(i=0;i<16;i++)printf("%8lx %8lx\n",xor128(),xor128sse2());
c=clock();for(i=0;i<50000000L;i++)xor128(); printf("xor128(): %4lu msec\n",clock()-c);
c=clock();for(i=0;i<50000000L;i++)xor128sse2();printf("xor128sse2():%4lu msec\n",clock()-c);}


66 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:04:20 ]
32 行書けるんだからもうちょっと綺麗におながいします

67 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:52:54 ]
上のほうでrand()をダイハードに食わせるとかいってた人がいたのでオチを教えておきます。
p=1.0頻発します。テストの種類によっては部分がすべてp=1.0 あわせてp=1.0みたいな。

xor128()って、例の論文に載ってるコードを組み込む場合、ライセンスはPD扱いですか?


68 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:53:58 ]
>>65
こりゃ無茶だろ.こういう使い方は...
別の種の乱数を4個同時に生成するのが正解

69 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 16:03:59 ]
>>62
xor128内部で使われてる変数x,y,z,wの中のxに、デフォルトの数値(123456789)の変わりに
与えられたseed値を代入するようにしてみた。
一応ちゃんと動作してるっぽいが統計的に良いのか悪いのかはよく分からん

70 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:39:47 ]
>>69
初期値ってあの値じゃなくても良かったのね。
乱数の質がどの程度変わるのかが気になるが



71 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:28:29 ]
やっつけでtimeの値入れたり

72 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:41:19 ]
SEED値を入れるならxよりwの方がいい気がする

73 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 20:24:10 ]
/* >>68 さん。的確なアドバイスありがとうございます。>>68 さんの方法で書いてみました。*/
/* 種で初期化する関数付き。XorShift の SSE2 による高速化はあきらめるしかないのか! */
#include <stdio.h>
#include <time.h>
#include <emmintrin.h>
unsigned long xor128(void) {
static unsigned long x=123456789UL,y=362436069UL,z=521288629UL,w=88675123UL;
unsigned long t;t=(x^(x<<11));x=y;y=z;z=w;return(w=(w^(w>>19))^(t^(t>>8)));}

int idx=4; union { unsigned long v[4]; __m128i m; }
x={123456789,123456789,123456789,123456789},y={362436069,362436069,362436069,362436069},
z={521288629,521288629,521288629,521288629},w={ 88675123, 88675123, 88675123, 88675123};

void sxor128x4(unsigned long s)
{int i; for (idx=4,i=0;i<16;i++) x.v[i]=s=1812433253*(s^(s>>30))+i; }

unsigned long xor128x4(void) { __m128i t,r,s;
if (idx==4) { r=_mm_slli_epi32(x.m,11); t=_mm_xor_si128(x.m,r); x.m=y.m; y.m=z.m;
s=z.m=w.m; r=_mm_srli_epi32(s,19); s=_mm_xor_si128(s,r); r=_mm_srli_epi32(t,8);
t=_mm_xor_si128(t,r); s=_mm_xor_si128(s,t); w.m=s; idx=0; }
return(w.v[idx++]); }

void main(void){ long i,c;
for (i=0;i<9;i++) printf("%8lx %8lx %8lx %8lx %8lx\n",
xor128(),xor128x4(),xor128x4(),xor128x4(),xor128x4() );
for (sxor128x4(1),i=0;i<9;i++)
for (printf("\n"),c=0;c<4;c++) printf("%8lx ",xor128x4() );
for (c=clock(),i=0;i<100000000L;i++) xor128();
printf("\n(xor128():%lu msec), ",clock()-c );
for (c=clock(),i=0;i<100000000L;i++) xor128x4();
printf("(xor128x4():%lu msec)\n",clock()-c ); }


74 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:20:55 ]
>>73
その種の使い方、MTと全く同じだな

75 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:51:40 ]
XorShiftの正しいシードの設定方法を教えてくれ!

76 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 18:55:32 ]
論文の6ページ目に xor128 の seed set は全て0の場合を除いて、どの
ように設定してもよいと書いてある。しかし、極端な設定をすると不自然
な部分列が出力される。そこで初期化の方法はMTを参考にした。iを0
からではなく1から始めた理由は0を種にしたときに最初の2つの出力が
似た値にならないようにするためである。配列を使っているが、スピード
はオリジナルとほとんど変わらない。コンパイラによっては、こちらの方
が速くなる場合もある。デフォルトの初期ベクトルは rand,srand になら
って種を1としたときと同じである。

unsigned long MyVec128[4]=
{ 1812433254UL, 3713160357UL, 3109174145UL, 64984499UL };

void MySeed128(unsigned long s)
{
int i;
for (i=1;i<=4;i++) MyVec128[i-1]=s=1812433253UL*(s^(s>>30))+i;
}

unsigned long MyXor128(void)
{
unsigned long *a=MyVec128, t=a[0], w=a[3];
a[0]=a[1]; a[1]=a[2]; a[2]=w;
t^=t<<11; t^=t>>8; w^=w>>19; w^=t; a[3]=w; return w;
}


77 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:35:39 ]
なるほど、どんな初期値であっても、2^128-1のどこかの部分列になってるのか

78 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:17:42 ]
>>61について誰か詳しく頼む

79 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:25:58 ]
ん? 何が分からなかった?

80 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:44:19 ]
遅いんだよ
もういい



81 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:24:35 ]
はやっ

82 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:53:55 ]
こんな過疎スレで遅い言われても

83 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:59:56 ]
自分がいくら張り付いてるからって、ね。

84 名前:78 mailto:sage [2008/02/02(土) 06:55:22 ]
>>61のソースの所在教えてくれ
パクる

85 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/02/02(土) 07:20:15 ]
dSFMTだったごめん。
nct.brain.riken.jp/~takekawa/softwares.xhtml


あとこんなのもあった。
charles.karney.info/random/



86 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:34:07 ]
thx

87 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:46:53 ]
ダンゴさんはSSEネタには造詣が深いな。

88 名前:デフォルトの名無しさん [2008/02/03(日) 16:46:36 ]
じゃあ上げとこ

89 名前:デフォルトの名無しさん [2008/02/22(金) 20:01:38 ]
シミュ板、数学板に乱数スレ発見。
乱数
science6.2ch.net/test/read.cgi/sim/1100375806/
乱数の生成方法を必死になって考えるスレ 
science6.2ch.net/test/read.cgi/math/1203153071/

90 名前:デフォルトの名無しさん [2008/03/23(日) 01:46:24 ]
あげ



91 名前:デフォルトの名無しさん [2008/03/27(木) 23:56:06 ]
XORSHIFTって、その出力の剰余を取った場合も
良質なランダム性があるって言われているのでしょうか?

92 名前:デフォルトの名無しさん [2008/03/28(金) 00:05:34 ]
XORSHIFTは良質ではないと思います

93 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:06:25 ]

工工エエエエエ(´Д`)エエエエエ工工

94 名前:デフォルトの名無しさん [2008/03/28(金) 00:11:48 ]
MTが一番良質と思います XORは速度は速いです 用途によっては十分です

95 名前:デフォルトの名無しさん [2008/03/28(金) 00:20:58 ]
>>91です。
XORSHIFTで剰余を取った時の結果を載せてる
WEBページを見た気がするのですが、結果が
今一だったような記憶が・・・

自分でも試してみようと思っているのですが、
理論的には説明出来そうにないし。

96 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:02:22 ]
>>95
そのWEBページのURL教えてくれ

97 名前:95 mailto:sage [2008/03/28(金) 23:26:21 ]
>>96
個人のブログですが、確かここだったと思います。
ttp://d.hatena.ne.jp/Isoparametric/20070830/1188462129

今、改めて読んでみると、よく意味分からん・・・

98 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 23:55:04 ]
たった100回回しただけなら偏りも出るだろう

99 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 04:27:31 ]
はぐれめたるは捕まえられますか?

100 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 03:21:30 ]
>>99
むり



101 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:00:50 ]
単純に何の補正も無い相手に対して「捕まえられる」確率はどのくらいか。
そしてはぐれメタルが逃げない確率はどのくらいか。
その両方のデータをくれ。

102 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:05:05 ]
乱数とどういう関係があるんだ

103 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:27:07 ]
え?はぐれメタルの行動を決めている乱数テーブルの解析の話じゃないの!?

104 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:54:50 ]
ここは「擬似乱数生成アルゴリズム」に関する議論のスレッドだ

105 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/04/21(月) 13:20:43 ]
PS2のドラクエ5では壁の衝突回数をカウントして乱数列の初期化してるようだ。
オラクルベリーの教会から一度も壁に衝突せずにカジノのスロットに直行すると
全く同じパターンが出てくるとか。

おそらくはぐれメタル捕獲にも何らかのパターンがあるかと

106 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 08:14:14 ]
全然ちげーよ、ばかが

107 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:16:04 ]
「ヽ・´∀`・,,)っ━━━━━━┓」は放置推奨クソコテ

108 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 23:36:04 ]
英語版MTを読んでいたらこんなのを見つけた。
ttp://en.wikipedia.org/wiki/Multiply-with-carry
で、cで実装してみた。
あんまり使えないと思うけど。

/* Complementary Multiply With Carry */
void initialize( unsigned long );
unsigned long cmwc( void );
enum { A = 3636507990, B = 0xffffffff, R = 1024 };
unsigned long seed[ R ], index, c;

void initialize( unsigned long n )
{
unsigned long i;
for (i=0; i<R; i++) {
seed[ i ] = n;
n = n * 1103515245 + 12345;
}
index = c = 0;
}
unsigned long cmwc( void )
{
unsigned long x;
unsigned long long t;
t = (unsigned long long)seed[ index ] * A + c;
x = B - (unsigned long)( t & B );
c = (unsigned long)( t >> 32 );
seed[ index ] = x;
if ( ++index >= R ) index = 0;
return x;
}

109 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 21:01:47 ]
>>105
www.astr.tohoku.ac.jp/~ajiki/cheap_restaurant/GAME/SAGA2/saga2rand.html
サガ2の乱数発生器

DQ5もソース見れば多分判ると思うよ

110 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 22:07:45 ]
DebianのOpenSSLライブラリに予測可能な乱数の生成を行う脆弱性 - ITmedia
ttp://www.itmedia.co.jp/enterprise/articles/0805/15/news023.html

OpenSSLの脆弱性突くブルートフォース攻撃発生、簡単に暗号解読の恐れ - ITmedia
ttp://www.itmedia.co.jp/news/articles/0805/16/news019.html

Debian JPプロジェクトのアナウンス
ttp://www.debian.or.jp/blog/openssl_package_and_its_vulnerability.html



111 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 09:17:00 ]
まとめ乙

112 名前:デフォルトの名無しさん [2008/08/06(水) 01:14:02 ]
保守

113 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:00:17 ]
M系列という単語を見かけたので、理解してないまま保守リンク
pc11.2ch.net/test/read.cgi/tech/1158367586/751-

114 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:05:33 ]
VBAで、dll使わずに高機能な乱数を実装する方法はないですか?
XorShiftを使うには、長桁計算しかないですか?

115 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 17:47:46 ]
' Xorshift を VBA で書く場合、Double を使うと比較的シンプルになる
' VBA の演算子 Xor と関数 Fix は 31 bit までしか扱えないので
' 53 bit まで扱える関数 uFix、uXor を用意した。
Option Explicit
Public x, y, z, w As Double

Function uFix(ByVal x As Double) As Double
Const Base = 2# ^ 22
Dim y As Long
y = Int(x / Base): uFix = y * Base + Int(x - y * Base)
End Function

Function uXor(ByVal i As Double, ByVal j As Double) As Double
Const Base = 2# ^ 22
Dim u, v As Long
u = Int(i / Base): v = Int(j / Base): i = i - u * Base: j = j - v * Base
uXor = (u Xor v) * Base + (Int(i) Xor Int(j))
End Function

Function xor128() As Double
Dim t As Double
t = x * 2# ^ 11: t = t - Int(t / 2# ^ 32) * 2# ^ 32
t = uXor(x, t): x = y: y = z: z = w: t = uXor(t, uFix(t / 2# ^ 8))
w = uXor(uXor(w, uFix(w / 2# ^ 19)), t): xor128 = w
End Function

Sub Test()
Dim i As Long
x = 123456789#: y = 362436069#: z = 521288629#: w = 88675123#
For i = 1 To 2000: Cells(i, 1) = xor128: Next
End Sub


116 名前:115 mailto:sage [2008/08/13(水) 18:47:55 ]
' 書き込んだ後、uFix は必要がないことに気づきました。
' こっちの方が高速です。
Option Explicit
Public x, y, z, w As Double

Function uXor(ByVal i As Double, ByVal j As Double) As Double
Const Base = 2# ^ 30
Dim u, v As Long
u = Int(i / Base): v = Int(j / Base): i = i - u * Base: j = j - v * Base
uXor = (u Xor v) * Base + (Int(i) Xor Int(j))
End Function

Function xor128() As Double
Dim t As Double
t = x * 2# ^ 11: t = t - Int(t / 2# ^ 32) * 2# ^ 32
t = uXor(x, t): x = y: y = z: z = w: t = uXor(t, Int(t / 2# ^ 8))
w = uXor(uXor(w, Int(w / 2# ^ 19)), t): xor128 = w
End Function

Sub Test()
Dim i As Long
x = 123456789#: y = 362436069#: z = 521288629#: w = 88675123#
For i = 1 To 2000: Cells(i, 1) = xor128: Next
End Sub


117 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 18:18:26 ]
>>116
114です、ありがとうございます。32bitのXorShiftですね。

で、周期の途中から乱数を取り出して使いたいのですが、
x,y,z,wの初期値を乱数で設定するのに、デフォルトのrnd()を使ったら無意味ですよね。


118 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:23:17 ]
>>75あたりか

119 名前:115 mailto:sage [2008/08/22(金) 21:40:15 ]
'種を使って初期化できます。116よりさらに2倍程度高速になりました
Private Const p32 = 2# ^ 32, p31 = 2# ^ 31, p21 = 2# ^ 21, p11 = 2# ^ 11
Private Const m53 = 2# ^ -53, m32 = 2# ^ -32, m30 = 2# ^ -30, m19 = 2# ^ -19, m11 = 2# ^ -11, m8 = 2# ^ -8
Private x, y, z, w As Double
Private f As Boolean
Private Function uXor(ByVal x As Double, ByVal y As Double) As Double
Dim u, v As Long
If x >= p31 Then u = x - p32 Else u = x
If y >= p31 Then v = y - p32 Else v = y
u = u Xor v
If u < 0 Then uXor = u + p32 Else uXor = u
End Function
Private Function XSub(ByVal x As Double, ByVal i As Long) As Double
Dim s As Variant
s = CDec(1812433253) * CDec(uXor(x, Int(x * m30))) + CDec(i): s = s - CDec(Int(s * m32)) * CDec(p32): XSub = s
End Function
Public Sub InitXor(ByVal s As Long) ' s を種にして乱数を初期化する
f = True: x = XSub(s, 1): y = XSub(x, 2): z = XSub(y, 3): w = XSub(z, 4)
End Sub
Private Function NextXor() As Double
Dim t As Double
If f = 0 Then InitXor (1)
t = x * p11: t = t - Int(t * m32) * p32: t = uXor(x, t): x = y: y = z: z = w: t = uXor(t, Int(t * m8)): w = uXor(uXor(w, Int(w * m19)), t): NextXor = w
End Function
Public Function NextUnif() As Double ' 0 以上 1 未満の乱数を返す
Dim x, y As Double
x = NextXor * m11: y = NextXor: NextUnif = (y * p21 + Int(x)) * m53
End Function


120 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 23:22:43 ]
xorshiftって周期とか分布の保証ってあるの?
もしないならM系列の方がましだと思うんだけど。
ググれば長周期の多項式も見つかるし。



121 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 01:50:28 ]
劣化M系列と理解してるが

122 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 02:50:13 ]
早くて軽くてrandよりマシ

123 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:31:11 ]
>>119
excelVBAじゃ初期化するための種が結局16bitしかないんだから
Xorshiftの種も16bit種類しかなくならね?

124 名前:119 mailto:sage [2008/08/27(水) 03:32:41 ]
種 s は Long なので32bit種類あるが、負の場合は試してないので実質31bit種類。

125 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 10:43:09 ]
VBAのRandomizeが16bit種類
それを使って初期化後rnd()で取得できる乱数も16bit種類
XorShiftの種にそれらを使うのなら結局系列は16bit種類

本当の最初の最初に32bitの乱数をセットするときにどうすればいいのか。
32bitのランダムな位置からXorShiftを開始するのに、そのうちの16bit分しか設定できない。

126 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 10:56:10 ]
よく分からんが服を買いにいく服がない状態か

127 名前:119 mailto:sage [2008/08/27(水) 14:14:51 ]
>>125

確かにそうだ。困ったもんだ。

128 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 14:18:21 ]
>>125
GetTickCountとかCryptGenRandomとかWin32APIに頼ればいいじゃない。

129 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 12:44:39 ]
>>128
とりあえず
Private Declare Function GetTickCount Lib "kernel32" () As Long
後に
  GetTickCountを使って取得するようにしたよ。

130 名前:,,・´∀`・,,)っ-○●◎ mailto:sage [2008/09/15(月) 02:50:11 ]
暇だったからSFMTのC++ template実装やってみた
tripper.kousaku.in/20080914.html



131 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:02:02 ]
GJ!
前スレからずっと待ってました

132 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:05:17 ]
あ、なんだ
TR1対応じゃなくて純粋にテンプレート版なのか

133 名前:,,・´∀`・,,)っ mailto:sage [2008/09/15(月) 14:24:14 ]
そのうちBoost風に作り替える予定

134 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:55:19 ]
乱数って巻き戻しできないの?


135 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 10:24:14 ]
>>134
乱数の巻き戻しって何?

136 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:00:52 ]
予想すると
あるシードでのn番めの乱数を出したあとに、n-1番目の乱数を
定数時でだせないか?
ってことでは

137 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:01:59 ]
>>136
そのとおりでございやす


138 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:09:45 ]
n-1番めからn番めを求める計算がたいてい非可逆だから無理

139 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:59:05 ]
巻き戻す必要がある数分だけ乱数の結果を保存するしかないだろうなぁ

140 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 19:03:50 ]
XorShift ならちょっと考えればわかる。
線形合同法なら 2^{31}-1 だけ進めた x=Ax+C の A と C を求めれば可能。
メルセンヌツイスタやWELLなら
www.iro.umontreal.ca/~lecuyer/myftp/papers/jumpf2.pdf
の方法で周期よりも一つ少ないところへジャンプすれば不可能ではないはず。



141 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:13:31 ]
これって読み捨てるのと比べてどのぐらい高速?
MTの先頭の何百万個か読み捨てる処理に使えそう?

142 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:22:53 ]
何百万よりは速いだろうが、100程度なら大差ない。

と、コード見ないで言ってみる

143 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 17:39:27 ]
flashのActionScriptの乱数Math.randomって何bit?

144 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 22:19:58 ]
25くらい

145 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 11:00:47 ]
MTならFORTRANだけど
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/fortran.html
この中に
revrand(): it generates prn in reverse order
って書いてあるけど

146 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:52:49 ]
MTの巻き戻しのフォートランをCに移植してみた。

#define main dummy
#include "mt19937ar.c"
#undef main

unsigned long revgrnd(void) {
static unsigned long mag01[2]={0x0UL,MATRIX_A}; unsigned long y=mt[--mti],z,p,q,mt0L,mt0; int x,kk;
if (mti==0) {
z=mt[N-1]^mt[M-1]; x=(int)(z>>31); y=z^mag01[x]; p=(y<<1)|x; mt0L=LOWER_MASK&p; mt[0]=(mt[0]&UPPER_MASK)^mt0L; mt0=mt[0];
for (kk=N-1;kk>N-M;kk--) { z=mt[kk-1]^mt[kk-1+M-N]; x=(int)(z>>31); y=z^mag01[x]; q=(y<<1)|x; mt[kk]=(UPPER_MASK&p)|(LOWER_MASK&q); p=q; }
for (;kk;kk--) { z=mt[kk-1]^mt[kk-1+M]; x=(int)(z>>31); y=z^mag01[x]; q=(y<<1)|x; mt[kk]=(UPPER_MASK&p)|(LOWER_MASK&q); p=q; }
mt[0]=(UPPER_MASK&p)|mt0L; y=mt0; mti=N;
}
y^=(y>>11); y^=(y<<7)&0x9d2c5680UL; y^=(y<<15)&0xefc60000UL; y^=(y>>18); return y;
}

int main(void) {
int i; static unsigned long x[5000],y[5000];
for (i=0;i<5000;i++) x[i]=genrand_int32();
for (i=4999;i>=0;i--) y[i]=revgrnd();
for (i=0;i<5000;i++) if (x[i]!=y[i]) { printf("ERROR\n"); break; }
for (i=0;i<10;i++) printf("%08lx %08lx\n",x[i],y[i]);
return 0;
}


147 名前:デフォルトの名無しさん [2008/10/22(水) 21:18:38 ]
とつげき東北とかいう人の乱数生成法を見て思いついたけど
メモリを確保して、読み書きする速度を計測すれば真の乱数できそう。
もともとはハードディスクの読み書きだが。これだと生成に時間食う。

148 名前:デフォルトの名無しさん [2008/10/22(水) 21:20:08 ]
これね。

ハードウェア乱数生成ルーチンhdrand.c  by とつげき東北 
www.interq.or.jp/snake/totugeki/hdrand.htm

149 名前:デフォルトの名無しさん [2008/10/22(水) 21:24:52 ]
でもメモリが余ってるときに均一に分布したとしても一杯になったら悪くなるかも試練ね

150 名前:デフォルトの名無しさん mailto:age [2008/10/22(水) 21:30:57 ]
>>147
時には極端に偏ってくれないと真の乱数とはいえないな。




151 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:39:34 ]
Unix の /dev/random は、デバイスドライバからそういう真の乱数を
生成するようなタイミングの情報をもらってデータを生成しているのだが...

152 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:41:38 ]
実行時まで偏ってるかどうかすら分からんから実用的には疑問だけどな。
違うハードの組み合わせで似たようなシードが繰り返し出てしまう可能性も否定出来ん。
特性が誰にも分からんから乱数としてもいいだろうって発想は学問的ではないな。


153 名前:デフォルトの名無しさん [2008/10/22(水) 21:45:17 ]
元手にするだけで、そのまま使うはず無いだろ。
たとえば、メモリ確保と読み書きした間隔が
1ナノ秒から100ナノ秒に分布しても偏りはでる。
そこは適切に処理して良い具合にする

154 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:39:08 ]
メモリの読み書きレイテンシがどういう条件で決まるかわかって言ってるか?


155 名前:デフォルトの名無しさん [2008/11/03(月) 16:36:49 ]
srand(0)とsrand(1)はその処理系でも同じ系列を生成するのですか?

156 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:29:47 ]
その処理系て?

157 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:45:50 ]
なんだろね?

ところでシードに関して系列という単語がよく出るけど違和感が…
乱数アルゴリズムの多くはシードは開始位置を決めるだけで
同じ乱数列を参照してるんだよね。
イメージ的には馬鹿でかい時計のようなものがあって、
秒針よりももっともっと小さい針が数字を拾ってる感じ。
系列という言葉だとそれぞれが全く違う乱数列のように聞こえる。
まあ現実的には2^128くらいあれば被ることはないと思うけどさ。
なんか気になる。

158 名前:155 mailto:sage [2008/11/03(月) 17:52:33 ]
まちがえました。
「その処理系でも」→「他の処理系でも」
でした。


159 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:59:04 ]
srandはアルゴリズムからしてライブラリの実装次第だから
処理系以前に互換性はないと思え。
そもそもrand自体0からRAND_MAXまでの整数を出力するとかそういう定義しかないはず。
確かMTはその辺しっかりしていて、どこでも同じ結果が得られたはず。

160 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:41:28 ]
>>157
rand() を実装するために使用する手法がいろいろあり、たとえば線形合同法・M系列・メルセンヌツイスタなどと呼ばれるものでしょうね。
手法とパラメータさえ同一であれば、当然同じ乱数列が生成されますが、rand()/srand() がどのように実装されているか、明確に
定義されているわけではないので、なんともいいようがないですね。



161 名前:デフォルトの名無しさん [2008/11/05(水) 19:25:05 ]
>>148
>MTのような、周期の長い良質な擬似乱数の種としてこれを使えば、暗号ツールなどに実用的に応用できる。

MTのような暗号的に安全ではない擬似乱数の種に、暗号的に安全な乱数
を使っても出力は暗号的に安全ではないよな?
この記述はおかしいよな?

162 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:38:22 ]
いや。

暗号的に安全ではない乱数生成系を、暗号関係の目的で使用するには、
出力ストリームに一方向ハッシュ関数を噛ませる方法がある。

その時に、シードは予測不可能なものである必要がある。

163 名前:デフォルトの名無しさん [2008/11/27(木) 22:25:54 ]
NIST test 2.0bってどうなの?

なんかDFTで必ず落とされるんだけど。
とりあえずMT19937, G using SHA-1, Micali-Schnorr試したけど駄目だった。

164 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 09:42:11 ]
そりゃすげぇ
真の乱数で試してみたら? スレ違いだけど...

165 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 11:42:49 ]
真の乱数も試したけど駄目だった。
なんかp valueの分布が高いほうに偏ってる。

166 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:12:53 ]
ffmpegで有名なMichael Niedermayerさんの記事
Pseudo random number generators
guru.multimedia.cx/pseudo-random-number-generators/
Pseudo random number generators 2
guru.multimedia.cx/pseudo-random-number-generators-2/

167 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:48:27 ]
再現可能な擬似乱数じゃないけど、こんなんみつけた

ハードウェア乱数生成ルーチンhdrand.c
www.interq.or.jp/snake/totugeki/hdrand.htm


168 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:49:11 ]
概要をコピペ
> テンポラリファイルフォルダにファイルを作成・削除し、その処理にかかった時間
> を高分解能パフォーマンスカウンタで計測して、処理時間を得る。
> 処理時間のビット列のうち、偏らないビットを乱数ビットとして利用する。
> ハードディスクのシーク時間や物理的な書き込み速度は、キャッシュや温度や湿度や
> Windowsの処理順などによってばらつきがあるので、良質なランダムビットがとれる。
> 測定されるビットの変化を最初にテストしておくことで(100回のビット発生で、
> 充分に変化が見られたビットだけを乱数に使用する)、処理速度の違いや、パフォーマンスカウンタの質の悪さ(例えば最下位ビットが必ず偶数や奇数になる可能性)も吸収できる。


169 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 15:42:33 ]
WindowsってOSにこのてのメカニズム持ってないのか?

170 名前:デフォルトの名無しさん [2009/01/05(月) 17:21:26 ]
ん、こういうの俺も昔遊びで作った事がある。




171 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:24:02 ]
SFMTをExcelで使うなら、シード値ってどうやりゃいい?
sgenrand Timer * 1000
なんてのがどっかにあったが、なんかいまいちだよな。

172 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 00:12:34 ]
>>169
ハードウェア使った処理が含まれているかどうかは分からないけど、
暗号論的に安全なのが欲しければ、CryptGenRandom使えということになっている。

173 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 06:06:19 ]
>>166の続き。ffmpegではMT (Mersene twister)の質が悪く遅いということで非推奨(deprecated)にされました。質が良いのを使いたいならMLFGやKISS99を使えとのこと。
lists.mplayerhq.hu/pipermail/ffmpeg-cvslog/2009-March/021108.html

174 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:38:50 ]
何が問題なんだろ。
松本さんの実装は、内部状態が1周した時に一斉に計算するようになってるので、
負荷が一定しないよなぁとは思うんだが、そういうとこじゃなくて、原理的に問題が
ある、っつってんだよね。
遅いというのは、はあそうですか、というだけなんだけど、blogのほう見ると、
XOR だけで構成されている、ってことをdisってるように見えるんだが...

175 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/03/09(月) 20:41:31 ]
KISS99もシンプルだし悪くはないんだが

176 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:23:48 ]
>>174
ブログで参照しているこのペーパーにあるMT19937のテスト結果がCrash 2回、BigCrash 2回になっているからだからだと思う。
www.iro.umontreal.ca/~lecuyer/myftp/papers/testu01.pdf
誰か解説キボン

177 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:55:31 ]
どんなアルゴリズムであっても一周期において均等分布を達成するとなると
全てのビットパターンを発生させるという点で結局M系列と同じ事になるんだよな。
するとマクロではみんな十分にランダムということになるから、
あとはミクロでのランダムさとその実装方法からくる計算量が問題なわけだな。
そのあたりに何かあるんじゃなかろか。

178 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 11:49:47 ]
なんかその論文で提案してるテストでは、暗号学的な強度のあるジェネレータ以外は
のきなみパーフェクトでない結果を出してるみたいだ。
MTの成績が際立って悪いとかそういう結果ではないけど、ffmpegの作者的には
気になる結果なのかな?

179 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 22:15:08 ]
元々そちらの専門家みたい

180 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 14:38:32 ]
ダメ



181 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 20:18:13 ]
en.wikipedia.org/wiki/Mersenne_twister#Alternatives
>The Mersenne Twister algorithm has received some criticism in the computer science field, notably by George Marsaglia.
>These critics claim that while it is good at generating random numbers, it is not very elegant and is overly complex to implement.
>Marsaglia has provided several examples of random number generators that are less complex yet which he claims provide significantly larger periods.
>For example, a simple complementary multiply-with-carry generator can have a period 10^33000 times as long, be significantly faster, and maintain better or equal randomness.[5][6]

*5 groups.google.com/group/comp.lang.c/browse_thread/thread/a9915080a4424068/
*6 groups.google.com/group/sci.crypt/browse_thread/thread/305c507efbe85be4

182 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 20:20:22 ]
スワヒリ語でおk

183 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 20:54:53 ]
なんか見覚えある名前だなーと思ったらXorshiftの人だったか

184 名前:デフォルトの名無しさん [2009/08/11(火) 03:30:02 ]
あげ

185 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 13:07:46 ]
次は185が出てくる

186 名前:デフォルトの名無しさん [2009/08/14(金) 01:57:19 ]
お初ですが質問させてください。

現在sfmtについて作成者のHPにあるプログラムを見て勉強しています。

そこで64bitでシフトしてる部分があって、unsigned long long等が対応していないコンパイラでやる場合(32bitまでしかない)、何かいい方法はありますか?
自力で32bitでシフトしてもいいのですが…

初心者なので意味不明な説明かもしれませんが、参考になる方法やHP等ありましたら教えてください。


187 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 02:06:20 ]
そこだけ__asm { } でインラインアセンブラで書くとか

188 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 08:53:55 ]
int64が無いコンパイラだとasmも無さそうな

189 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 09:37:58 ]
>>186
具体的なロジックを出さないと、曖昧なレスしかつかないよ。

190 名前:デフォルトの名無しさん [2009/08/14(金) 13:23:06 ]
186です。

さっそくの返信ありがとうございます。

一応必要な部分だけアセンブラで書くことも可能だったと思いました。ただ現在携帯からの書き込みでキツいので、あとでまた書きます。




191 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/08/15(土) 09:25:55 ]
>>186
ないから自力でやれ

192 名前:デフォルトの名無しさん [2009/08/15(土) 20:24:26 ]
どなたかご教示願います。
lehmerの線型合同法で作成される乱数値は、
初期値が同じでも計算機環境の違いにより変わることはありますか?

193 名前:デフォルトの名無しさん [2009/08/16(日) 02:20:18 ]
うん

194 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 08:03:39 ]
同じ数式を計算したのに計算機環境の違いで結果が変わることがあると思う?

195 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/08/16(日) 08:23:56 ]
浮動小数ならよくある

196 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 08:28:53 ]
>>> (2 / 3) * 6
0
>>> 6 * 2 / 3
4


197 名前:192 [2009/08/16(日) 11:13:06 ]
>>193>>195>>196

ありがとうございました。

198 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 10:39:10 ]
>>196
それらは「同じ数式」といえるのか?

199 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 13:04:38 ]
>>194
有効桁数をちゃんと制御して、その動作が保証されている言語を使うなら、
バグでない限り有効桁数の範囲で変わることはない。

ただ同じ数式の同一の変数に別の値を与えたのなら変わってもおかしくないよ。
つかそれ以前に疑似乱数に関係あるのかw

200 名前:デフォルトの名無しさん [2009/09/03(木) 21:52:50 ]
高次元均等分布性ってどういうこと?
p[i]=(x[Ni+0],x[Ni+1],…,x[Ni+N-1])
として作ったN次元乱数のN次元空間上散布図が
N次元空間内に平面作ったり偏ったりせずにぼんやり分布することと考えていいのかな?



201 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 07:05:22 ]
誤解を恐れずに大雑把かつ簡単に言うと、
nビットの状態空間があるとして、
一周期の間に00...00から11...11までnビット(n桁)の数字が
過不足なく1回ずつ出現すること。
それが満たされると周期全体で直前のn-1ビットの状態に関わらず
次の1ビットの出現確立が必ず50:50になる。
つまりn-1次元で0と1が均等に分布したことになる。
状態空間を越えた次元では分布については全く保証出来ない。
だからMT含めて最近の擬似乱数はみんな状態空間をかなり大きめにとってる。

ただしこれはあくまで一周期のことであって、
一周期の一部を切り出した場合(通常の使用状況)では全然話が別ね。
マクロとミクロの違いというか両方同時に成り立たせるのは難しい。
よく0過多状態からの回復の速さが注目されるけど、
状態空間が大きいのに三項式とかだと(MTのことね)
0の多い区間はその前後でも0が多くなる。
逆に1の多い区間はその前後で1が多くなってトータルで均等になるわけさ。

202 名前:デフォルトの名無しさん [2009/10/04(日) 07:32:06 ]
一月あげ

203 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 10:51:02 ]
unko

204 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 15:32:33 ]
Blum-Blum-Shub のC/C++ の実装コードが掲示されているサイトを知ってる人いませんか?
java での実装例はここにあるんですが
code.google.com/p/javarng/

205 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:00:56 ]
1+1=2

206 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:22:02 ]
>>204
BlumBlumShub.java を C/C++ に書き換えるだけじゃだめなん?


207 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:34:10 ]
C/C++ に BigInteger の標準的な代替物でもあれば楽勝だろうけど

208 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:55:46 ]
blumblum.c とfreelip いうファイルを見つけ
www.mindspring.com/~pate/crypto/chap05/blumblum.c
math.arizona.edu/~aprl/math/comp/bigint/
blumblum.c をgcc (GCC) 4.2.4 でコンパイルするのですが
zcopy とか、zfree とか、zなんとかという命令がコンパイルできなくて詰まっています。
何なんだこのz何とかというコマンドは?cの命令セットにはないぞ、posix かなんかの命令セットなのか?

209 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:01:35 ]
>>204>>208です皆さんサンクスです。
>>207
その通りです、java からの移植はBigInteger を見て、ライブラリから作る羽目になりそうだったので
速攻あきらめました。boost にBlumBlumShubがあればいいのにな・・・・

210 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:46:53 ]
>208
C/C++ ではコマンドとか命令とか命令セットとは言わないだろう、普通。
命令セットって言われたら CPU の instruction set を思い浮かべるわ。

で、freelip ってのの中に z* 入ってるじゃん。
C/C++ の分割コンパイルに詰まってるんだろうけど、とりあえず
gcc -o blumblum blumblum.c lip.c
とかで実行ファイルできない?

あと、boost vault には bigint が有ったような。使いものになるかしらんけど。



211 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:41:31 ]
>210
gcc -o blumblum blumblum.c lip.c
このオペレーションも上手くいかない・・・orz



212 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:27:47 ]
今度はオペレーションて

213 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 06:28:55 ]
>>209 gmp じゃだめ?


214 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:53:51 ]
どういうエラーが出てるのか書かなきゃ対処しようもないぞ

215 名前:デフォルトの名無しさん [2009/11/14(土) 09:37:55 ]
xorshiftをunsigned longではなく32bit intの範囲内でやる方法はありませんか?


216 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:45:06 ]
complementary multiply-with-carry ってのが
周期長くて計算軽いってのは分かったけど
高次元での均等性はどうなの?
MTだと623個の組で使っても大丈夫ということだけど

217 名前:デフォルトの名無しさん [2009/11/14(土) 19:33:47 ]
RC4が最強だろ

218 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:29:33 ]
>>215
符号無しの整数型が存在しない言語で実装しようとしているのか?
例えば、Javaとかだと符号付き整数型でも気にせずビット演算して大丈夫のはずなんだけど。

もう1つ、そのunsigned longはおそらく32ビットだと思う。コードを注意してみて。
違ったとしてもググれば32ビット符号無し整数(unsigned intだかunsigned longだか)での実装はすぐ見つかると思う。

219 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:08:23 ]
最近できた疑似乱数をまとめたサイトとかない?

220 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 08:22:52 ]
起動戦士ランダム♪ランダム♪



221 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:36:41 ]
俺がランダムだ

222 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 13:19:31 ]
シェーダ/GPGPU向けでよい疑似乱数ってどんなのがあるでしょうか。
数列系の疑似乱数を直に使うことが出来ないのでいろいろ考えています。

223 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 14:30:20 ]
もっと具体的に書かないと分からん
メモリアクセスが厳しいとかそういう話か?

224 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 14:35:46 ]
もう一つ
>数列系の疑似乱数
擬似乱数はみんな数列だぞ

225 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 14:42:46 ]
ワーキングセットが小さい、って意味か?
確かにMTは比較的大きいが。

226 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 15:01:10 ]
アナログテレビの砂嵐状態のように、全画素を毎フレームノイズで埋め尽したいと考えています。
その際、2次元画面*時間の3次元で相関などがなく一様分布するノイズにしたいのです。
画素ごとに並列に計算できれば高速に計算できることは分かっているのですが、
数列を使う以上は基本的に一つずつ取り出すしかなく並列化できません。
そのため、並列計算で生成できる疑似乱数生成法がないかと探しているところです。

一応全画素に32バイト割り当てればそれぞれXorShiftの系列が張り付けられるかなとは考えましたが、
やはりちょっとワーキングセットが大きくなるのと、
XorShiftの系列間相関の有無がよくわからず、躊躇しています。

自分で実装しなければならないなら、各画素の計算では、画素の座標(各座標に固有だが相関たっぷり)と、
フレームごとに全部画素一律に参照できるベクトルを与えることができるので、
それをうまく使って乱数列の系列の途中の値をうまく与えられないかなあ、などと考えています。

227 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 15:22:14 ]
プールして切り出し

228 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 15:33:08 ]
xyz全部に相関なしか…そいつぁ難しいぜ
とりあえず画素毎に独立した個別の乱数を充てるのはダメだな
少なくとも画素以上の状態空間を持った乱数を用意しないと相関なしには出来ないんだぜ
適当に作っても任意の画素間で相関がないことを保証できないだろ?
そもそも同じ生成式を使えば初期値が違うだけで結局同じ乱数列しか得られないからな

とまあ大げさに書いたけど、本気で3次元完全無相関を目指してるわけじゃないよね?
落としどころとしてはMTとか周期の長い乱数を使って
一定フレーム毎に各画素の状態を更新してしまえばいいと思うよ。
各画素はM系列とかXorShift?(いまいち信用できない)を使えばよろし。


229 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 20:32:23 ]
遅れまして申し訳ありません。

>>228
勉強になります。
一瞬、隣の画素の状態を見ながらメルセンヌツイスタのように「捻れ」ないかと思いましたが、
結局そこでデータコヒーレンシーの問題で並列化できなそうなのでそれも無理そうですね

結構本気で3次元無相関を目指しているというか無相関であることが優先される用途なので、
現在は時間を仕切って有限の大きさにしてプールして切り出し、というのが現実的な解となっています。
ただ長時間やるにはメモリがいくらあっても不足するような感じなので、
なんとか生成できないかなあと思う次第です。
副産物として、落としどころとしてそれっぽいものを作ることは吝かでもないですが。

230 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 21:37:19 ]
>>229
当然ながら精度と速度は両立しないんで、
どこまで必要なのか見極めて妥協することになるけど、
仮に1画素あたり32bitとして640*480なら、
最低でも1228800バイト以上の状態空間が必要だね。
これで1フレーム分だから残り何フレームまで必要なのか考えてみればいいよ。

>一瞬、隣の画素の状態を見ながらメルセンヌツイスタのように「捻れ」ないかと思いましたが、
MTの「捻り」はGFSRの短かった周期を理論値まで伸ばしてるだけ。
無闇に隣を参照したらダメだよ。




231 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 23:07:46 ]
>>230
ありがとうございます。
まずはM系列からということでググったり本棚をあさったりしていたのですが、
疑似乱数を作るということは、どういう遍歴をたどる数列を設計するかという話だ、ということが改めて身にしみました。
また、正しく「捻る」にはビットの遍歴が最長となるよう正しくビット間の周回コースを繋がなければならない、という理解でいいのでしょうか。

> 落としどころとしてはMTとか周期の長い乱数を使って
> 一定フレーム毎に各画素の状態を更新してしまえばいいと思うよ。
という話は、最初見たとき手抜き実装かなと思ってしまったりしたのですが、
冷静に考えるとCPU側とGPU側の状態は両方とも完全に決定可能なのだから、
周期や分布もちゃんと計算できるのですね。
この方法が自分の目的にとっては王道のような気がしてきました。

まったく不勉強で疑似乱数の世界の入場門がどこにあるかがやっとわかった状態ですが、
道筋がなんとなく見えてきたので、次に質問する前に、もっと自分で勉強してみたいと思います。
素人の思いつきに懇切丁寧にご回答いただきありがとうございました。

232 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 12:02:20 ]
>>228
こういう用途なら、単純に1次元化して、正規乱数を利用すればいいんじゃないの?

233 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 12:35:43 ]
それじゃ速度が出ないだろ
というかそれでいいなら質問してこないだろ


234 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 12:38:29 ]
その前にその正規乱数はどこから持ってくるのかと小一時間(ry

235 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 23:20:47 ]
>アナログテレビの砂嵐状態のように、全画素を毎フレームノイズで埋め尽したいと考えています。

あれ、ほんとに相関なしなん?>詳しい人
なんか、いいセルオートマトンとかありそうじゃない?

236 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 00:55:27 ]
砂嵐状態っていっても度合いがあるからね。
元の信号が強く混ざってれば文字通り目に見えて分かるし。
砂嵐(スノーノイズ)の原因は熱雑音らしいから
S/Nが十分に悪ければ(笑)ほぼ相関なしといえると思う。

熱雑音はランダムか?という問題は話が別ね。
そっちは量子論の問題だから。
何か法則があるかも知れないしないかも知れないけど
とりあえず理論的に確認できる方法がないので(観測問題)
そこのところは考えないでおこうってのが今の主流。
どちらであっても今のところ結果は統計的な予測と一致している。
ので今のところ統計的に熱雑音はランダムと言えるっぽい。

そもそもランダム・不規則ってなんだ?ってのも哲学っぽくて難しい問題だ。
熱雑音も本当は原子の状態(擬似乱数でいう状態空間)を完全に知ることが出来れば
その後の振る舞いを予測することが出来るはずなんだけど(決定論)
前の状態と次の状態を同時に知ることが出来ない(観測問題)。
観測者の有無に関係なく次の状態は決まっていると考えたのはアインシュタインで
(神はサイコロを振らない)この説は今は少数派。
果たして観測者が次の状態に影響を与えた結果は如何に?

ところで仮に完全に熱雑音の振る舞いを表現することが出来たとして
それをもし理論的に解析できたとしたらその結果はランダムだろうか?
周期も分布も分かってる既存の擬似乱数の方が良かったらどうだろう?
今までに我々がランダムと呼んでいたものの正体は…?


237 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 03:21:02 ]
仕組みが分かったところで、解を出すためには初期条件が必要
シードを与えて一意な結果を出すのは一般的な乱数と同じものだろ

238 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 03:26:41 ]
>>237
何の話?

239 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 04:32:49 ]
物理量を離散的に捉えるのは根本的に違ってるぞ

240 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 05:36:42 ]
サンプリングすればおk



241 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 19:07:32 ]
DOOM をソフトウェアラスタライズしていた頃と比べれば、リアルタイム程度なら CPU で mt やって充分間に合いそうな気がする。
こういう大量生成が対象なら、前に Cell スレで盛り上がってたコンテストの最適化がフィットすると思う。
そんで別の種でマルチスレッドでクアッドコアで、って感じでどうだろう。

242 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 03:25:51 ]
プリレンダした砂嵐テクスチャ並べて適当に描画すれば?

243 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 09:28:59 ]
>>242
それは正しい処理だが、スレタイを翌嫁。

244 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 16:31:10 ]
>>242,243
それだとテクスチャが沢山必要になるからi/oで引っかかって
擬似乱数より遅くなるよ


245 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 20:19:14 ]
二次写像などのカオスの数値の下ビットを使うというのはどうだろう

でも実際に相関がないことを証明する必要があると面倒ですね。
plot(rand mod 640,rand mod 400,rand mod 16)
とかでとびとび直線が出てびっくりですよ


246 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 20:48:42 ]
>>245
数理的な意味でのカオスってのは、テント写像に代表されるように
小数点以下を無限に汲みだす漸化式になっているから予測が難しいのであって、
種が有限桁数であっては成立しない。

むしろ、いかなる相関性のある入力に対しても、
周期は短くていいから高速に前ビットかき回して相関のない出力を出す関数があればいい気がする。

247 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 20:48:48 ]
こんなことを言い出すやつがいるとは…
それは線形合(ry
このスレは分かってる人とそうでない人のレベル差が妙に大きいな

248 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 20:57:18 ]
>むしろ、いかなる相関性のある入力に対しても、
>周期は短くていいから高速に前ビットかき回して相関のない出力を出す関数があればいい気がする。
いいわけない、というかそれはただのハッシュ
等確率性・分布・周期を保証できないし
入力がずっと同じだったらどうにもならん

249 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 21:02:21 ]
>>248
アンカが抜けてた

>228の
> 落としどころとしてはMTとか周期の長い乱数を使って
> 一定フレーム毎に各画素の状態を更新してしまえばいいと思うよ。
に対して、それなら各画素で回す周期は短くていいんじゃないかなと。
等確率性と分布は証明or検証する必要性があるとして。

250 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 21:36:24 ]
>>246
頭悪そうな意見だな。周期が短い時点で相関性アリまくりだろうが。
↓こういう馬鹿(道化師)がいたことを思い出す。
【危険】とんでもプログラム告発スレッド【悪質】
pc11.2ch.net/test/read.cgi/tech/1191860116/
1 名前:デフォルトの名無しさん[] 投稿日:2007/10/09(火) 01:15:16
劣悪なプログラムやアルゴリズムを、恰も優れたものだと言い張り、
他人を騙しているサイトを告発、検証、監視することを目的としたスレッドです。
単純に技量不足だったり、稚拙であるもの、下らないものは対象としません。
第一弾として、
道化師氏のサイト(www.trickpalace.net/)の
疑似乱数アルゴリズム「無相関性擬似乱数アルゴリズム-prime spiral-」
www.trickpalace.net/column/random.htm
を紹介します。このアルゴリズムおよび作者の言動の問題点は以下のとおり。
・MT(Mersenne Twister)がダメだと主張しながら、具体的な問題点は指摘できていない。
・MTより劣悪な乱数を生成しながら、MTより優れていると主張する。
・周期がたったの2^32のしかない(線形合同法と同レベル)
・無駄にテーブル参照するため遅い(線形合同法より劣悪)
・優れていると主張しながら、言葉の定義と評価基準を示すことはしない。
・indexと最低限の出力系列(各素数の和)が得られると、初期ベクトルが逆算ができてしまう。
・最低限の出力系列で、全パターンに出現する値の分布が確定する。
indexが確定すれば出現順まで確定するほど相関性が非常に高く劣悪。
・出ない値が確定するという点で乱数とはもはや呼べない。
・作者は暗号用途にも使えるつもりでいる。MTより「良い」乱数だと宣伝しているが、
実際は周期、分布などの点で低品質。信じて使うとろくなことにならない。

アルゴリズムの問題点や作者の人間性が明らかになる過程はこちらのスレで読めます。
擬似乱数
pc11.2ch.net/test/read.cgi/tech/1146071975/



251 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:04:22 ]
これは過去ログ見てみたかったな
まあ乱数弄ってりゃそのうち巡り会うこともあろう

252 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:25:44 ]
>>426が言いたいのはハッシュ関数かと思われ

253 名前:デフォルトの名無しさん [2010/01/12(火) 03:31:52 ]
>>251
過去ログ(1146071975.dat)うpしたね
www.dotup.org/uploda/www.dotup.org553146.dat.html
よかたら見るね

254 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 11:59:26 ]
>>226
ホワイトノイズ(一様分布)じゃなくてブルーノイズでも良いなら方法はある。
ブルーノイズはホワイトノイズの低周波成分を除いたもの。

ホワイトノイズではモアレのような模様が見えるがブルーノイズでは模様は見えない。

255 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 16:02:33 ]
乱数をjpegなどのデコーダーに食べさせるって言うのはどうだろうか

256 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:01:39 ]
>>253
頂きました!
どうもありがとう〜
俺,週末になったらこれ読むんだ…

257 名前:241 mailto:sage [2010/01/13(水) 05:15:25 ]
試してみたが、VC++2008EE の /O2 でコンパイルした MEXP=216091 の sfmt の gen_rand32() で
1920x1200 を 30 枚埋めるのに、2003年の CPU P4 2.6C で 600ms 弱くらい。
今なら余裕じゃない?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<68KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef