擬似乱数

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
擬似乱数発生器について語ろうか。
2デフォルトの名無しさん:2006/04/27(木) 02:21:19
n * 1103515245 + 12345 mod 2147483647
3デフォルトの名無しさん:2006/04/27(木) 02:26:29
LD A, R
4デフォルトの名無しさん:2006/04/27(木) 02:35:58
>>2
n * 1103515245 + 12345 mod 2147483648
の間違い
5デフォルトの名無しさん:2006/04/27(木) 02:39:25
*(char *)(0xFFBC0161)
6デフォルトの名無しさん:2006/04/27(木) 03:00:43
MT
7デフォルトの名無しさん:2006/04/27(木) 05:52:27
では手始めに、メルセンヌツイスタの荒探しの話題から頼む。
8デフォルトの名無しさん:2006/04/27(木) 06:28:13
9デフォルトの名無しさん:2006/04/27(木) 14:29:10
ここはム板らしく、あら捜しよりも高速化とか考えた方がいいんじゃない?
10デフォルトの名無しさん:2006/04/27(木) 15:42:25
暗号通信用に擬似乱数生成専用チップがあるようだが
11デフォルトの名無しさん:2006/04/28(金) 11:56:29
ではその仕組みについて講義してくれ
12デフォルトの名無しさん:2006/04/28(金) 14:01:30
13デフォルトの名無しさん:2006/04/28(金) 18:28:56
>>7
アルゴリズムじゃなくて、その実装(mt19937ar.c)のアラでよければ。

MTは内部状態として624個のベクトルを持ち、そこから乱数をひねり出す。
つまりはMTは624*32=19968ビットの乱数生成器で、
その19968ビットの乱数表から32ビットずつ取り出すのがgenrand_int32()関数ということができる。
で、genrand_int32()を624回呼ぶごとに内部のベクトルを一度に「えいや」と更新するようになっている。
大量の乱数が必要な場合は並列処理が効くのでこれでよいのだが、
中程度数の乱数がリアルタイムで必要となる場合、これはいただけない。
例えばゲームでMTを使うとすると、624回乱数を生成するごとにフレーム落ちが発生、ということもありうる。
genrand_int32()を1回呼び出すごとに1つのベクトルを更新するようにすれば
いつでも同じ時間で乱数が得られる。
14デフォルトの名無しさん:2006/04/28(金) 18:39:05
ゲーム用ライブラリとかで、mt19937.cがほとんどそのまま使われているのを見ると
「お前本当に分かっててその乱数発生器を薦めているのか?」と言いたくなる。
15デフォルトの名無しさん:2006/04/28(金) 23:12:59
>>7
>では手始めに、メルセンヌツイスタの荒探しの話題から頼む。 

でかい、重い。

大体、普通の用途でここまで乱数性に拘る場面はそうそうない
(だから喧嘩を売られた knuth もスルーした)。
16デフォルトの名無しさん:2006/04/28(金) 23:42:09
でかいは同意だが、そんな重いか?
17デフォルトの名無しさん:2006/04/28(金) 23:47:00
あーでも初期化は重いかな。ほとんどハッシュ関数だよね、あれ。

まあ周期長いから頻繁に初期化するような使い方はしないが。
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)) );
}
19デフォルトの名無しさん:2006/04/29(土) 00:09:50
つか、速くてランダムなやつとなると
やっぱりどれもハッシュ関数みたくなるのな。
20デフォルトの名無しさん:2006/04/29(土) 00:10:17
パチンコで勝つためはどのような乱数をシミュレートすればいいのですか
21デフォルトの名無しさん:2006/04/29(土) 00:12:53
脳内乱数
22デフォルトの名無しさん:2006/04/29(土) 01:01:05
ゲーム用途なら、そこそこ均等に出てくれれば精度自体は8ビットぐらいでも問題ないよな。
23デフォルトの名無しさん:2006/04/29(土) 01:02:49
つうかMTは本家サイト自身が「モンテカルロ法シミュレーションのための擬似乱数」って言ってなかったか?
均等な乱数が超大量に必要な場合に使う、みたいな。
24デフォルトの名無しさん:2006/04/29(土) 01:43:55
ここはまあまあ有意義なスレですね
25デフォルトの名無しさん:2006/04/29(土) 04:20:02
ゲームで言えば、1フレームに数百から数万(雨とかパーティクル)なら線形合同法で十分だろう。
プログラマーには見えても、ユーザーには周期性は見えないよ。

1フレーム数回以下なら、必要なら重くても高品質なほうがいいんじゃない?
AI とか、 ランダムダンジョンとか。
26デフォルトの名無しさん:2006/04/29(土) 07:30:18
>>18それ、まともにM系列のが
27デフォルトの名無しさん:2006/04/29(土) 20:33:09
でも、正直な話、現実での MT の用途の割合なんて

 1.ゲームプログラマの自己満足の為:86%

 2.汎用のライブラリが乱数生成関数として
 MT を採用しているから、いつの間にか使っている:10%

 3.本来のシミュレーション用に使用:3%

 4.その他:1%

位だと思う。
28デフォルトの名無しさん:2006/04/30(日) 15:17:30
WELLについて調べようとおもったんだけど……
ぐぐっても"well"なんて単語としてありきたりすぎて
関係ないページがヒットしまくりなんだが。
作者的には「より良い」と語呂合わせしたつもりなんだろうが、
いまや情報化社会。物にはなるべく一般的な語とかぶらないような名称をつけて頂きたい。
29デフォルトの名無しさん:2006/04/30(日) 22:18:10
ゲーム用で再現性無くていいなら、時間とユーザーの入力
(その時しかありえないようなPCの状態)を混ぜりゃほぼ
ランダムになる。
30デフォルトの名無しさん:2006/04/30(日) 22:23:18
>>29
その必要も無いのに、
テスト項目に「時間」と「ユーザーの入力」の要素が
入るような実装は、極力避けるべき。

テストの自動化が出来ない。 
31デフォルトの名無しさん:2006/04/30(日) 22:31:53
SSL の証明書作るときのシードにキー入力使ってたな。
32デフォルトの名無しさん:2006/05/03(水) 15:09:15
インターネットを利用したランダム関数できないかな?
33デフォルトの名無しさん:2006/05/03(水) 18:20:08
>>32
パケットが通過する間隔はポアソン分布に従う、とかそういうのを利用するのか?
34デフォルトの名無しさん:2006/05/03(水) 18:58:42
2ちゃんねるを利用したランダム関数欲しい
35デフォルトの名無しさん:2006/05/03(水) 21:02:28
>>18
これ確かに早いけど、種を選ぶのが難点だね。
128ビットで、そこそこ0と1が混じってないと駄目ってのが。
種用に物理乱数とか、遅くても質のいい乱数発生器を別個に使う必要があるなあ
36デフォルトの名無しさん:2006/05/04(木) 00:41:36
>>13
あと、初期化が糞だよねぇ。そのせいでかなり癖のある乱数列が生成される。理論台無し。
37デフォルトの名無しさん:2006/05/04(木) 08:02:03
まあ初期化ルーチンに関しては他の乱数生成関数とかハッシュ関数とか組み込めばええんでない?
xorgensでもMTでもどの擬似乱数でも言えることだけど。
38デフォルトの名無しさん:2006/05/04(木) 08:09:30
MTの初期化ルーチンをそのまま使うときは最初の100万個ぐらいは読み飛ばしたほうがいいらしい。
39デフォルトの名無しさん:2006/05/04(木) 08:14:57
100万の根拠は?
40デフォルトの名無しさん:2006/05/04(木) 08:26:44
統計的としか言いようが無い。
50万とか70万とかいうデータもあるが
41デフォルトの名無しさん:2006/05/04(木) 08:37:49
正確には681,1573個だ。
42デフォルトの名無しさん:2006/05/04(木) 08:51:13
要するにマンコ
43デフォルトの名無しさん:2006/05/04(木) 09:36:18
>>30
再現性がなくなるだけで、時間を加味していればテストは自動化できるだろ。
話それるがユーザー入力だって、ある程度自動化するし。
>>32>>33 全部ユーザー入力と一緒じゃね
44デフォルトの名無しさん:2006/05/04(木) 10:57:54
>>38
はつみみなのでソースおせーて
45デフォルトの名無しさん:2006/05/04(木) 12:31:25
初期化が糞な場合、MTみたいに周期がアホみたいに長い疑似乱数はその程度
読み飛ばすだけで癖が抜けるとは思えんのだが。
46デフォルトの名無しさん:2006/05/04(木) 12:51:05
>>40
その統計の在処をぜひ
47デフォルトの名無しさん:2006/05/04(木) 14:23:52
じゃあみんなで初期化関数考えようぜ。
(新しい擬似乱数考えるのと同じになりそうだが)
48デフォルトの名無しさん:2006/05/04(木) 14:37:16
>>47
そんなの Windows なら CryptGenRandom 、Unix系なら /dev/urandom を使う・・・てのが常識では?
49デフォルトの名無しさん:2006/05/04(木) 15:30:21
MD5だっけ?
まあ暗号用に使うんじゃなくてあくまで擬似乱数用の種だからCRCとかでもいいような希ガス
50デフォルトの名無しさん:2006/05/04(木) 16:47:54
どうでもいいならシステムタイマー使えばいいし
厳密にやりたきゃ>>48の使えばいいし。
51デフォルトの名無しさん:2006/05/04(木) 19:56:01
結局、MT 厨は、そのネームバリューを闇雲に信じるだけで、
自分で乱数性の検証はしていなかったんだな。
52デフォルトの名無しさん:2006/05/05(金) 18:18:49
>>51
当たり前だろw
偉い人が使えるって言えば使うだけ
53デフォルトの名無しさん:2006/05/05(金) 18:25:54
M系列乱数と、線形合同法の結果をXORして使えば

M系列が2^127-1の周期で線形合同法が2^32の周期だから 合成周期は掛け算でいいんだよな?
54デフォルトの名無しさん:2006/05/05(金) 19:59:17
>>51
それが厨の厨たる所以。

>>53
ヒント 指数は掛け算が足し算。
つまり合成周期は2^159弱ってこった。
55デフォルトの名無しさん:2006/05/05(金) 20:47:20
M系列乱数と、線形合同法の結果をXORした場合、
簡単に種を見つけるアルゴリズムはあるのだろうか?
56デフォルトの名無しさん:2006/05/06(土) 15:07:25
総当たりが一番簡単だ。
57デフォルトの名無しさん:2006/05/06(土) 18:27:20
>>55の言う「簡単」はそういう意味じゃないと思われ
58デフォルトの名無しさん:2006/05/06(土) 19:05:50
もし総当りしかないのなら暗号に使えないかな
59デフォルトの名無しさん:2006/05/06(土) 19:51:45
ワンタイムパッドとしてなら
60SOURCE ◆tAo.kQ2STk :2006/05/06(土) 20:53:53
>>55
両方の式を満たすような特殊な式があればいくらでも出来そうなキガス。
線形合同法は離散対数とかの扱いが面倒だが?

>>56
総当りすればいつかは解けるけどさ、現実的な時間内で2^159弱ある鍵空間を全て試せるのか?
2^159≒10^47*7.3
一秒間に10^39回強のスピードで当たれるとして23年ほどかかるぞよ。

>>58
それは正しいけど、総当り以外に破る方法が存在しない事を証明する事は難しいとオモフ。
61デフォルトの名無しさん:2006/05/07(日) 12:15:43
証明されてなくても多分大丈夫だろうって使われてるのはあるな
62デフォルトの名無しさん:2006/05/07(日) 13:19:27
証明できるくらいまで研究が進む頃には、
総当たりで簡単に種を探せるようなスペックのマシンが動いている気がする。
63デフォルトの名無しさん:2006/05/07(日) 13:38:43
>>62
光の速度を考えると、本当にそんなマシンが出来ると思う?
64デフォルトの名無しさん:2006/05/07(日) 14:34:54
量子論的重ねあわせがどうこう
65デフォルトの名無しさん:2006/05/07(日) 14:44:58
>>64
この場合、全部の組み合わせを検索しなければならないのだとしたら
まず全部の組み合わせをどこかに入れておく必要があるんじゃないの?
そうすると物理的に不可能でしょ
66デフォルトの名無しさん:2006/05/09(火) 00:29:21
>>10
半導体中の熱電子の揺らぎを使った、
熱的乱数発生モジュールを売っているベンチャーもある。
もう数年前の話だけど。
67デフォルトの名無しさん:2006/05/11(木) 00:56:09
>>65
一つの量子に複数の状態を重ね合わせることが出来るので
理論上はあらゆる組み合わせを一箇所に保管できるようになる。
現在の技術では4状態で実験に成功したそうだw 先は長い……
681つ、二つ、おっぱい。:2006/05/11(木) 22:14:09
> 一つの量子に複数の状態を重ね合わせることが出来るので
 〜〜〜〜〜〜〜〜
> 理論上はあらゆる組み合わせを一箇所に保管できるようになる。
       〜〜〜〜〜〜〜〜〜〜〜〜〜 

後半ダウト。
「複数=あらゆる」って、おまいは大きな数を数えられない未開人ですか?
69デフォルトの名無しさん:2006/05/12(金) 04:36:31
別に間違っていないが。
70デフォルトの名無しさん:2006/05/13(土) 10:13:33
また開き直りか。
71デフォルトの名無しさん:2006/05/14(日) 08:48:58
考える問題において可能なあらゆる状態数がNのとき
一個の量子ビットにN個の状態を重ね合わせる量子アルゴリズムを使うなら
別におかしくないね
72デフォルトの名無しさん:2006/05/14(日) 10:29:03
言い訳乙w

頭悪すぎ
73デフォルトの名無しさん:2006/05/14(日) 10:34:05
おまぃの「理論」とやらでは、
量子と周囲とのインタラクションを完全遮断して、
かつ、その量子に任意個数の状態を保持可能なのかwww

ずいぶん貧弱な理論だなwww想像力が足りないというかwww基礎知識がない素人の発言は怖いというかwww
74デフォルトの名無しさん:2006/05/14(日) 10:48:20
というより 
検索が高速だとしても、
1万なら1万通りの状態を一瞬で作る方法があるのか?
あるなら、既にその問題は解けてるわけじゃないのか?
7571:2006/05/14(日) 11:07:33
>>67でも>>69でもないですが、おいらはShorの素因数分解アルゴリズムのことを言ったんだけど

>かつ、その量子に任意個数の状態を保持可能なのか

一体何の話?
7671:2006/05/14(日) 11:09:49
あ、>>62からの流れだったんですね
すいません
77デフォルトの名無しさん:2006/05/14(日) 11:23:40
>考える問題において可能なあらゆる状態数がNのとき
>一個の量子ビットにN個の状態を重ね合わせる

とか言ってる時点で素人モロバレ
7871:2006/05/14(日) 11:31:16
>>77
あ、ほんとだ
一個のqubitに格納する状態の数はN個じゃなかった
うろ覚えですいません
79デフォルトの名無しさん:2006/05/14(日) 17:12:03
>>66
それって周囲の温度によって乱数変わったりしない?
80デフォルトの名無しさん:2006/05/14(日) 17:13:20
アメリカの暗号乱数発生チップには諜報機関の権限でバックドアが仕掛けられているという話だが…
81デフォルトの名無しさん:2006/05/14(日) 18:25:00
>>18これって普通にソースに組み込んで使ってもライセンスの問題無い?
82デフォルトの名無しさん:2006/05/16(火) 05:54:12
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)) );
}


x
11101011011 1100110100010101

y
10101100110100101010111100101

z
11111000100100011101110110101

w
10101001 0010001001100110011

tの初期値が種?
83デフォルトの名無しさん:2006/05/16(火) 07:51:37
>>82
よく見ろ、t の初期値は使われてないぞ。
84デフォルトの名無しさん:2006/05/16(火) 08:14:36
unsigned long xorHoge(){
static unsigned long x=123,y=456,z=78,w=90;
unsigned long t;
t=(x^(x<<13));x=y;y=z;z=w; return( w=(w^(w>>7))^(t^(t>>5)) );
}

こんなのでもいいの?

種(xyzw)の選び方やシフトするbit数の根拠がよう解らんのですわ。
85デフォルトの名無しさん:2006/05/16(火) 12:12:56
ここには乱数に詳しい人はいない件
86デフォルトの名無しさん:2006/05/16(火) 14:33:23
飯の種だし
こんなところにタダで書くわけにも
87デフォルトの名無しさん:2006/05/16(火) 22:17:00
>>18
乱数全然わからんけど、
y,zはただのキャリアーでx,wの上下32bitを使うのね。
中間の64bitは使わなくてもいいの?
その方が出力が読みにくかったりする?
88デフォルトの名無しさん:2006/05/17(水) 05:19:45
そんな単純な問題じゃない
89デフォルトの名無しさん:2006/05/17(水) 06:36:50
>>87
よく見れ、種として機能している。
90デフォルトの名無しさん:2006/05/17(水) 17:02:00
擬似乱数の種を得る方法には時刻以外にどんなものがある?
91デフォルトの名無しさん:2006/05/17(水) 18:20:51
未初期化変数のゴミ値
92デフォルトの名無しさん:2006/05/17(水) 20:48:26
マウスカーソルの座標
93デフォルトの名無しさん:2006/05/17(水) 20:51:13
俺の場合、セキュリティ関係の用途じゃない時のデフォは[時刻+プロセスID]。
セキュリティ関係の用途の時には >>48
94デフォルトの名無しさん:2006/05/17(水) 21:32:34
サウンドカードからの入力(ノイズ)値
95デフォルトの名無しさん:2006/05/17(水) 22:47:54
>>94
俺DTMやっててフルデジタル環境なのでサウンド入力は常時0になりますが……
もしかして俺の環境だとうまく乱数吐かないソフトあるんかな?
96デフォルトの名無しさん:2006/05/17(水) 23:28:26
>>91
それ、ほとんど毎回同じになるだろ。
97デフォルトの名無しさん:2006/05/18(木) 00:42:15
連続起動時間
CPU稼働率
メモリ使用率
メモリキャッシュ量
HD容量+使用率
98デフォルトの名無しさん:2006/05/18(木) 01:46:47
素直に>>48使おうよ…
99デフォルトの名無しさん:2006/05/18(木) 17:28:17
CryptGenRandomは失敗する環境があるから
100デフォルトの名無しさん:2006/05/18(木) 17:35:53
100
101デフォルトの名無しさん:2006/05/18(木) 18:28:39
>>94
そういやファミコンはアナログ信号ピンがあってカートリッジ側でそいつを読めたんだっけ?
それを乱数に使ったゲームは知らないが。
102デフォルトの名無しさん:2006/05/18(木) 20:56:02
>>99
MSが標準で提供してるサービスプロバイダを選んでちゃんとした初期化をすれば、失敗する環境なんてないだろ?

...俺も、以前はヘタレなコードを書いて環境よっては失敗するからなんでだろう?
と悩んでたけど初期化コードの問題だったぞ。(状態によって初期化方法を変える必要がある。)
103デフォルトの名無しさん:2006/05/18(木) 21:01:00
>>90
そういえば、Z80のアセンブラとかではリフレッシュレジスタ(※)の値を利用するなんて話もあったなぁ。

※昔のメモリシステムの名残で、メモリの内容が揮発しないように定期的にリフレッシュするのに
 使われたレジスタ。どこのメモリブロックをリフレッシュするべきかを指し示して高速にその値が循環する。
104デフォルトの名無しさん:2006/05/18(木) 21:04:34
105デフォルトの名無しさん:2006/05/18(木) 21:05:41
>>103
連続起動時間とそうたいして変わらんと思う
106デフォルトの名無しさん:2006/05/18(木) 21:14:18
たしか3ビットだか4ビットぐらいしかなかったような気がする>リフレッシュレジスタ
107デフォルトの名無しさん:2006/05/18(木) 23:11:51
>>106
7ビットだよ。
しかし互換CPUでは全く変化しないこともある罠。
108デフォルトの名無しさん:2006/05/20(土) 18:47:53
ところで、乱数性を評価する方の話はどうなのよ
http://csrc.nist.gov/rng/
とかさ
109デフォルトの名無しさん:2006/05/20(土) 19:38:12
>>108
俺は乱数を自作したりその乱数性を評価するときにはその評価対象の乱数である程度のサイズの
乱数列を生成しそれをそのままファイルとして保存し、ファイルの圧縮プログラムを使ってその結果
の圧縮率が悪いほどエントロピーが高い良い乱数として評価してる。俺的にはこの方法はお手軽で
且つかなり有効なテストの方法だと思ってるんだけど、ちょっと他人の意見を聞いてみたい。

所謂「後出し」にならないように付け加えておくと、俺はこの評価方法は飽くまでエントロピーの高さを
計るものであって真性乱数性を計るものではないと自覚している。真性乱数性はその特性上
(まともな)評価方法は存在しないものと思ってる。( だって、ずっと同じ値を吐き続けたって真性乱数
の場合はアリってされるんだから、そんなもん評価のしようがない。 )

ちなみに俺はこのスレでMTに癖があるって言い出したヤツだけど、
それはこの方法による評価でMTで生成した乱数列の圧縮率がよかったから。
110デフォルトの名無しさん:2006/05/20(土) 21:36:02
おいおい、エントロピーが高いってことはその範囲でのビットの出現回数に
偏りがないって事だろ。
MTほどの長い周期であれば部分的に偏りが生じる区間があるのは当然じゃない。
重要なのはその区間から次の区間を予測できないことな訳だ。
むしろ、いつどの区間を見ても偏りがないのなら短い周期しかもっていないことになる。

高々数MB、数GB程度のサイズじゃ乱数性は測れないよ。
試しに普通の線形合同法で乱数を生成してみれば分かる。
普通に圧縮できないから。
下位ビットは使うなよ。
111デフォルトの名無しさん:2006/05/20(土) 21:48:45
>>110
おまい、ちゃんとわかってる? ちゃんと実測した?

俺はMTの理論に問題があるなんて言ってない。初期化が糞だって言っただけ。
MTでもちゃんとした初期化をすればちゃんと圧縮率が悪くなるのも確認済みだし、
線形合同法なんかだと下位ビット捨てても圧縮率はいいぞ。
112デフォルトの名無しさん:2006/05/20(土) 21:50:44
>>111
> MTでもちゃんとした初期化をすればちゃんと圧縮率が悪くなるのも確認済みだし、
それって、 MT には何にも問題ないってことだよな?
113デフォルトの名無しさん:2006/05/20(土) 22:20:49
圧縮についてなんか知っててそんなこと言ってるのか?
圧縮ソフトが何やってるのか調べた方がいいぞ。
114デフォルトの名無しさん:2006/05/20(土) 22:26:01
>>112
そだよ。だけど、極端な話すると100万回やっても同じ値を吐き続けるとってもあほみたいに周期の長い乱数と
100万回で一週しちゃうんだけどその間のエントロピーは文句なしの乱数のどっちが実用的だと思う?
少なくともあの実装のMTではモンテカルロ法に利用すんのも止めといたほうがいいぞ。
115デフォルトの名無しさん:2006/05/20(土) 22:27:42
>>113
そもそも乱数性の検証に圧縮を利用するのはただのハックに過ぎないことはわかってる。
だからこそ、他人の意見を聞きたい。
116デフォルトの名無しさん:2006/05/21(日) 08:53:55
辞書サイズよりも大きい周期で同じデータを吐き出しても圧縮率は変化しないよね
117デフォルトの名無しさん:2006/05/21(日) 09:25:46
>>116
にも関わらず、MTや線形合同法では圧縮率がいいんですよ。

てか、他の優れた評価方法とかないの?
俺も多少は乱数性の評価方法とか調べたけどあまりにもしょぼいしのか見つからなくてよー
たとえ例えハックにも過ぎなくても、これじゃ圧縮を利用したほうが断然いいじゃん・・・て、今んとこ結論してるわけよ。
118デフォルトの名無しさん:2006/05/21(日) 10:49:31
>>111
>おまい、ちゃんとわかってる? ちゃんと実測した?
実測データキボンヌ
119デフォルトの名無しさん:2006/05/21(日) 14:52:24
>>118
俺も記録をちゃんと残してたわけじゃないから、精確な情報じゃないけど
数十MB規模のデータでMTの場合、だいたい圧縮率が90%代後半で
線形合同法だと圧縮率が80%代後半だった。
ちなみに俺が自作したヤツやMTでも初期化をちゃんとしたヤツだと
圧縮率は100±1%ぐらいだった。

↑これは記憶を元に書いたんで多少間違ってるかもしれん。
精確なデータが欲しかったら自分で実測すれ。
あと俺が試した圧縮アルゴリズムはLZHとZIP。この二つはアルゴリズムが
かなり似てるから本当はもっといろんなアルゴリズムで比較したほうが
いいんだろうけど俺はそこまではやってない。

# 当然だけど、LZHとZIPではほとんど圧縮率に差がでなかった。
120デフォルトの名無しさん:2006/05/21(日) 15:33:55
他の圧縮やってみたら全然結果が違ったらどうする。
121デフォルトの名無しさん:2006/05/21(日) 15:39:52
>>120
別にどうもしないけど。圧縮アルゴリズムが違えば結果も異なるのは当たり前。
しいて言うなら評価をする為の圧縮アルゴリズムのひとつとして採用するだけ。
122デフォルトの名無しさん:2006/05/21(日) 15:44:50
てか、ちゃんとした知識を持ってて、理論に基づいてどーこー言えるヤツはおらんのか?
俺自身も知識よりは閃きの人間だから、知識のないヤツは黙ってろとかは思わないが、
できれば知識を持ってる人間の意見を聞きたい。
123デフォルトの名無しさん:2006/05/21(日) 15:53:05
断る
124デフォルトの名無しさん:2006/05/21(日) 15:58:02
>>123
そんなこと言わないで、頼むよ〜
125デフォルトの名無しさん:2006/05/21(日) 17:11:27
1,2,3,・・・というデータはハフマン圧縮ではまったく圧縮できないがランダム性はない
126デフォルトの名無しさん:2006/05/21(日) 17:32:09
>>125
そこまでテキトーなこと抜かすなよ。
ちょっとバイナリでの表現がどうなるか考えりゃ、圧縮できることぐらいわかんだろ。
せめてもうちゃっと考えてから書き込んでくれ、な?
127デフォルトの名無しさん:2006/05/21(日) 17:51:37
>>126
いや循環し続けるデータなら ハフマンでは圧縮出来ないのは正しいだろ
ただ、差分をとれば途端に圧縮出来るのだが
128デフォルトの名無しさん:2006/05/21(日) 17:58:04
まずはランダム性を定義しろ
129デフォルトの名無しさん:2006/05/21(日) 18:30:55
>>127
理論ベースで言えば確かに >>125 が言わんとすることもわからんでもないが
実装ベースで考えれば >>125 の言う理論は途端に破綻する。
>>125 があげたようなデータを 8bit 表記にすればたかだか256バイトで循環するデータになるし
32bit 表記にすれば上位bitが圧縮可能なデータ群と可す。

が、bit幅可変長表記にすれば、確かに少なくともbit幅固定表記に比べ圧縮し難いデータには
なるだろう。しかし、それはランダム性がないデータと言えるか? これをランダム性のないデータ
だと言うヤツがいても、俺はそれを否定しないが、これがランダム性のないデータとするならあら
ゆる疑似乱数もランダム性がないものと評価するべきだろう。

>>128
ランダム性の定義ではないが、
圧縮アルゴリズムによる評価目的はエントロピーの高さを測ること。
130デフォルトの名無しさん:2006/05/21(日) 18:37:41
>>125
付け加えておくと、それはもっとも簡単な疑似乱数列だぞ。
131デフォルトの名無しさん:2006/05/21(日) 18:43:47
>>129
1,2,3,・・・,2^32までのデータを使えば32bit表記では各ビットパターンは一回ずつ登場する事になるぞ
132デフォルトの名無しさん:2006/05/21(日) 19:15:14
>>131
それでも圧縮は可能だろうが。

やっぱり、こんなとこでまともな意見を求めた俺がバカだったか。
こんなやりとり続けても時間の無駄だしもっと生産的なことに時間をつかうよ。じゃぁな。ノシ
133デフォルトの名無しさん:2006/05/21(日) 19:21:20
>>115
>そもそも乱数性の検証に圧縮を利用するのはただのハックに過ぎないことはわかってる。 
それは唯のハックでは無いだろ?
むしろ、コルモゴロフの定義に忠実すぎるぐらいだ。

ちなみに俺も同じ方法で別のものを評価していたりする。

それはソースコード。
圧縮率が高いコードは間違いなく糞コードだったりする。

圧縮後のファイルサイズは、いわゆるステップ数なんかよりも、
ずっとよい指標になる。
134デフォルトの名無しさん:2006/05/21(日) 19:30:37
>>133
基準はどれぐらい?
テキストなんでだいたい 20% ぐらいになるのも普通かと思うんだが。
135デフォルトの名無しさん:2006/05/21(日) 19:36:20
ところで、折角 >>108 が NIST の乱数検定器を挙げているのに
その実行結果について議論をするどころか、

>>117
>てか、他の優れた評価方法とかないの? 
>俺も多少は乱数性の評価方法とか調べたけどあまりにもしょぼいしのか見つからなくてよー 

とかぬかしている件について、どうよ?
136デフォルトの名無しさん:2006/05/21(日) 19:41:20
>>134
むしろ圧縮後のサイズがポイントだな。
圧縮した後のファイルサイズで、
「このアプリは、この程度の規模の複雑さを持っているんだな」
ってのが、意外に分かると思う。
137デフォルトの名無しさん:2006/05/21(日) 20:01:01
>>132
圧縮云々を言うならせめて情報理論ぐらい勉強しろよ・・・
138デフォルトの名無しさん:2006/05/21(日) 20:06:51
>>136
コメントに日記が書かれていても複雑なプログラムなのかw
139デフォルトの名無しさん:2006/05/21(日) 20:33:04
>138
で?何?
140デフォルトの名無しさん:2006/05/21(日) 21:38:44
バカばっか
141デフォルトの名無しさん:2006/05/22(月) 00:21:49
データ列を圧縮してその圧縮率がどう、ってのはシャノン情報量を見てるんだよね?

>>114
>そだよ。だけど、極端な話すると100万回やっても同じ値を吐き続けるとってもあほみたいに周期の長い乱数と
>100万回で一週しちゃうんだけどその間のエントロピーは文句なしの乱数のどっちが実用的だと思う?
確かに。
「100万ビットでも同じ値が続いてくれることがありえないと困る」ような乱数の使用法をしてるか否か、ってことだよね。
ゲーム用途なら下位ビットが最悪のrand()の方が人間相手には『確実にランダムっぽく』見える分有利かもしれないな。
でもそれはつまるところ、人間の持つ「ランダムさ」の感覚が
シャノン情報量の大小と一致していないところに問題があるわけだよね。
だから、マジで何万回も同じ値が出続けるかもしれないサイコロ振りより、例えばM系列の方が喜ばれたりする。
難しいねえ。
142・∀・)っ-○◎● ◆toBASh.... :2006/05/22(月) 00:31:35 BE:752619896-#
100万回同じ値を吐くという状況を再現できんのだが、何が問題なのかサパーリ
俺はboost::random::mt19937使ってる
143デフォルトの名無しさん:2006/05/22(月) 00:37:45
>>142
そりゃー32bitの乱数なら100万回同じ値になる確率は1/((2^32)^999999)なんだから
そうそう簡単に再現されるわけ無いじゃん。
144デフォルトの名無しさん:2006/05/22(月) 00:39:24
で、そうそう再現されない状況なんだから、
「はじめっからそんな値を吐かないアルゴリズムでも問題ないよな?」
という考え方で、もっと短周期の乱数アルゴリズムが『実用的』とみなされている。
ってこと。
145デフォルトの名無しさん:2006/05/22(月) 00:42:00
boostのMTはあんまり速度でなかったと思われ。
同じ使うにしても本家サイトで公開されてる「高速化版」に差し替えた方がいいかも。
(乱数生成アルゴリズムを入れ替えできて、同じインターフェースを提供、ってのがboostのいいところだしな)
146デフォルトの名無しさん:2006/05/22(月) 00:43:17
池沼としか思えんw
147デフォルトの名無しさん:2006/05/22(月) 00:46:42
いけぬまで悪かったな! これでも頑張って勉強中の身なんだ……
148デフォルトの名無しさん:2006/05/22(月) 04:08:13
このスレ見てて思ったんだが、乱数がどういうものかっていう理解度が人によってかなりまちまちなんだけど、
理解度が低い側の人が自分自身の理解度が低いということすらが自覚してなさげだね。

最低限↓このページの最初に書かれていることぐらいは理解したうえで議論すべきだと思うけど。
http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
149デフォルトの名無しさん:2006/05/23(火) 18:43:51
「スレが急激に伸びる時は大抵、池沼が書き込んでいる」
150デフォルトの名無しさん:2006/05/23(火) 18:45:47
↓↑
└┘ そうだね
151デフォルトの名無しさん:2006/05/25(木) 21:30:16
また池沼が寄ってきた
152デフォルトの名無しさん:2006/05/25(木) 21:42:01
おかえり池沼くんw
153デフォルトの名無しさん:2006/05/31(水) 02:33:35
なあMTよりもうちょっと周期短くていいからベクトル数すくない乱数ないの?
154デフォルトの名無しさん:2006/05/31(水) 21:39:14
AESやtwofish 等のブロック暗号の結果を使うと、エントロピーという面では良い?
ちなみに、暗号化した結果をさらに暗号化して、次の乱数を出していくような形だと、悪い性質が出てきたりするのかな?
155デフォルトの名無しさん:2006/05/31(水) 22:23:43
それOutput-FeedBackって奴じゃん。

じゃなくって、生成器Aで作った乱数列を鍵にして生成器Bで乱数列を作る、ってこと?
156デフォルトの名無しさん:2006/05/31(水) 22:50:20
XORすべき平文はないけれど、それも OFB って言っていいのかな?
そうであれば、たしかに OFBですね。
157デフォルトの名無しさん:2006/05/31(水) 22:52:01
で、結局、まともなブロック暗号であれば、エントロピー的な意味では、
悪い性質が出てきたりはしない筈…ですかね?
158デフォルトの名無しさん:2006/06/01(木) 00:25:28
>>156
全0の数列とXORして結果を得ていると考えればOFBの一種だな
159デフォルトの名無しさん:2006/06/01(木) 00:26:39
>>157
その「まともな暗号」を考えるのがムツカシイ
160デフォルトの名無しさん:2006/06/01(木) 10:58:08
>>159
154で書いた通り、前提として、AESやtwofishを想定していますけれど。
暗号の世界の死屍累々の歴史を見れば、よほどでなければ俺様暗号を作ろうなんて傲慢な気持ちにはなれないですよね。
AES 選考のときも、ドイツテレコムが採用していた暗号が 10秒で即死したり、笑い話に事欠かない世界…怖いですね。
http://h2np.net/bit/aes-rep.html
161デフォルトの名無しさん:2006/06/01(木) 13:58:02
>>160
ハァハァ 読んでて興奮するね。
162デフォルトの名無しさん:2006/06/03(土) 04:14:33
>>160
カコイイ!!
163デフォルトの名無しさん:2006/06/03(土) 05:16:05
>>160
最終的にAESに選ばれたのはそこで名前すら挙がっていなかったRijndaelだというのも
おもしろいな
164デフォルトの名無しさん:2006/06/05(月) 00:58:00
高速な乱数の基本はシフトとXORを使うことらしいが
この二つってそんなに演算早いの?
加減算やローテートは遅い部類なの?
165デフォルトの名無しさん:2006/06/05(月) 01:32:04
シフトとローテイトはCPUレベルではそんな変わらんと思うが

加減算は変わりそう
166デフォルトの名無しさん:2006/06/05(月) 01:42:13
>>164
命令自体は別に変わらないよ。
M系列でググると分かるけど、
ある周期で全てのビットが0である場合を除いて、
全ての0と1の組み合わせが出現するアルゴリズムがある。
そんでそれはシフトとxorのみで実現する事が出来るというだけ。
これはなかなか自然的な乱数の性質に近くて、
しかもコンピューターに都合のいい形をしている。
で、よく使われる。
加減算やローテートでも実現出来るんじゃないかな。
ただ、周期を大きくするのが難しそうだ。
167デフォルトの名無しさん:2006/06/05(月) 01:53:02
Pen4なら加減算が倍速でローテートはアホみたく遅い。
使用する環境が決まってるならCPUに特化した乱数ルーチンもアリだと思う。
168デフォルトの名無しさん:2006/06/06(火) 17:33:17
>>167
そのために、RCなんとかコンテストで、PowerPC とかがクロックの割に健闘したりってことがあった気が。
そういえば、CPU自体が(熱雑音とかを使った?)乱数生成器を持っているやつって、あるのかな?
169デフォルトの名無しさん:2006/06/06(火) 22:10:12
170デフォルトの名無しさん:2006/06/07(水) 10:40:12
こんなのも。どうやって使うのか知らないけれども。
http://www.intel.co.jp/jp/intel/pr/press99/991116.htm
インテル 820 チップセットは〜インテル(R) ランダム・ナンバ・ジェネレータ(乱数生成器)を搭載しています。
171デフォルトの名無しさん:2006/06/07(水) 20:49:19
メルセンヌ・ツイスタをSSE2で高速に計算する方法を思いついた!!
でも…… ワーキングメモリが2.5倍強ほど必要になってしまう…
ただでさえデカイと評判のMTがさらにでかく…
くそっ、SSEに128ビットアライメント縛りなんてものがなければ……
せめて64ビット縛りならいいのに
172デフォルトの名無しさん:2006/06/07(水) 21:37:59
PCで使うなら気にするこたねぇだろ
組み込みで使うならともかく
173デフォルトの名無しさん:2006/06/07(水) 21:46:05
そだね。
SSE2使おうってCPUならキャッシュで収まるもんね。
気兼ねせず実装することにしますわ。

でもアライメント縛りって本当に鬱陶しいな。スレ違い愚痴スマソ
174デフォルトの名無しさん:2006/06/07(水) 23:20:13
ま、その前提で高速演算できますって機能だから仕方ない。
組み込み系だと日常茶飯事だけどw
175デフォルトの名無しさん:2006/06/11(日) 14:44:38
「とってもごはん」のMMX版MTって、オリジナル版と出力違ってないか?
176デフォルトの名無しさん:2006/06/11(日) 16:49:37
>>171
うpはdvi形式でおk
177デフォルトの名無しさん:2006/06/11(日) 17:06:53
>>175
オリジナルのMTも32bit版と64bit版で出力違うから気にしなくていいと思う
178デフォルトの名無しさん:2006/06/12(月) 06:13:17
で、初期化がどーのこーのに難癖つけてた件は結局うやむやのうちに終了しちゃったの?
179デフォルトの名無しさん:2006/06/12(月) 10:48:14

そもそも何で乱数に初期化が必要なんだ?

種から生成するアプローチ以外の方法は無いのか?
180デフォルトの名無しさん:2006/06/12(月) 16:50:29
MT-32よりCM-64の方が面白いよ
181デフォルトの名無しさん:2006/06/12(月) 18:19:34
ローランド音源かよw
182デフォルトの名無しさん:2006/06/12(月) 18:21:24
>>178
心配なら暗号論的乱数で初期化汁、そこまで気にしないならどうでもいい、でFA出ちゃったからね。
183デフォルトの名無しさん:2006/06/12(月) 18:57:12
線形合同法で十分

場合によっては
184デフォルトの名無しさん:2006/06/13(火) 00:26:32
いけぬますれ
185デフォルトの名無しさん:2006/06/13(火) 00:48:08
>>184
そんなこと言ってないでなにか話題提供してくれよ
186デフォルトの名無しさん:2006/06/13(火) 03:09:15
擬似乱数について素人ですが、教えて頂けないでしょうか?

(0,1)の擬似乱数をMT19937(作成者のHPからFortranソースを拾ってきた)で発生させて、
その平均値と標準偏差が0.5と0.25になるのを確認しようとしました。
(作者の作成したサンプルデータと同じ結果がでることを確認しました。)
平均値は0.5にかなり近づくんですが、標準偏差が0.28程度になります。
乱数の個数を増やしていくと、0.28程度で収束しているように見えます。
octave(実装されてる乱数生成器)でもやってみたんですが、0.25程度に収束しません。

よろしくお願いします。
187デフォルトの名無しさん:2006/06/13(火) 04:27:11
[0,1] の一様分布に従う擬似乱数の標準偏差が
1/sqrt(12) に収束するのは別に何もおかしいところが無いわけだが

乱数の話というよりか確率・統計の話だな
188デフォルトの名無しさん:2006/06/13(火) 13:49:37
187さんへ
 ありがとうございます。
 たしかに、1/3-(1/2)**2でも0.288...になりました。
 0.25と思い込んでいました。
189デフォルトの名無しさん:2006/06/14(水) 01:07:11
>>175
それ以前に、メルセンヌツイスタはBSDライセンスのはずなのに
ソースコード中にライセンスについて一切の記述がない事がまずいと思う。
SYN氏、忘れてんのか?
190デフォルトの名無しさん:2006/06/14(水) 01:13:54
そーいや乱数発生器のライセンスってどうなってるんだ。
AESはフリーなんだっけ?
191デフォルトの名無しさん:2006/06/14(水) 05:53:41
yes
192デフォルトの名無しさん:2006/06/14(水) 21:52:44
Rijndaelだけ?他のは?
193デフォルトの名無しさん:2006/06/15(木) 10:46:52
自分で調べろ
194デフォルトの名無しさん:2006/07/08(土) 19:10:20
量子論的乱数発生器ってある?
195デフォルトの名無しさん:2006/07/08(土) 22:27:59
Intelの最近のチップセットには内蔵されてるはず
196デフォルトの名無しさん:2006/07/09(日) 02:16:37
詳細規模んう
197デフォルトの名無しさん:2006/07/09(日) 08:39:00
なんでコンピュータは擬似乱数しか出せないの?
198デフォルトの名無しさん:2006/07/09(日) 09:45:09
真性乱数も出せるだろ、専用のハードウェアがあれば。
199デフォルトの名無しさん:2006/07/09(日) 12:52:06
>>197
決定性チューリングマシンだから。

ところで非決定性なら一様乱数が得られるアルゴリズムがあるのか?
200デフォルトの名無しさん:2006/07/09(日) 14:55:03
>>197
つ /dev/random
201デフォルトの名無しさん:2006/07/09(日) 19:03:50
>>199
> ところで非決定性なら一様乱数が得られるアルゴリズムがあるのか?
真性乱数は無理。

というか、非決定性チューリングマシンができてしまうと、
今まで暗号論的擬似乱数と呼んでいたものの前提が全て崩れちまうな。
ttp://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
202デフォルトの名無しさん:2006/07/10(月) 01:33:58
>>201
えっと、そんなことはないです、オーダー的に。デタラメ言わないで。
203201:2006/07/10(月) 02:36:50
>>202
え、なんでだ?

非決定性チューリングマシンとはNP完全な問題を多項式時間で解くマシン、
すなわち、単純な総当たりで解くしかない(=解くには指数時間かかる)と思われていた問題を
多項式時間で解いてしまうことのできるマシンであるから、
RC4などストリーム暗号で使われる暗号論的擬似乱数列も多項式時間で解けちゃうでしょ。
204デフォルトの名無しさん:2006/07/10(月) 21:01:48
どうでもいいがWikipediaを参考文献として引き合いに出すのは勘弁してくれw

俺が書いた文章だったりするからwww
205デフォルトの名無しさん:2006/07/10(月) 21:13:30
>>204
嘘書いたの?
206デフォルトの名無しさん:2006/07/11(火) 06:52:21
自分の使ってる狭い専門用語を広めるのには便利かもしれないな。
207デフォルトの名無しさん:2006/07/11(火) 13:35:06
>>109の方法をやってみたら
どの乱数列データもまったく圧縮できないorz
208デフォルトの名無しさん:2006/07/11(火) 18:56:18
>>205
いやそういう意味じゃないが、非常に照れくさい……
209デフォルトの名無しさん:2006/07/19(水) 03:02:36
ま、素人はそう考えるわな。
210デフォルトの名無しさん:2006/07/19(水) 03:07:16
間違ってるけど
211デフォルトの名無しさん:2006/07/19(水) 12:52:58
一様な乱数のお薦めを見繕ってくれ
212デフォルトの名無しさん:2006/07/19(水) 13:08:01
MT
213デフォルトの名無しさん:2006/07/19(水) 18:00:52
C99のrand()関数は「ラグ付きフィボナッチ」だと聞いたけど、
どんなアルゴリズムなの?
214デフォルトの名無しさん:2006/07/19(水) 18:12:33
アルゴリズムまで規定してたっけ??<C99
215デフォルトの名無しさん:2006/07/19(水) 20:30:32
x_i = a * x_(i-p) + b * x_(i-q) (mod M)
狭義のlagged Fibonacciだとa = b = 1.
216デフォルトの名無しさん:2006/08/26(土) 01:43:17
線形合同法と似てない?
217デフォルトの名無しさん:2006/10/08(日) 06:58:26
>>211
一様では乱数とは言わない。
特定の周波数幅に対するホワイトノイズ乱数というのなら可能。
この場合は特徴があるが、目的に使う限り特徴は現れにくい。
218デフォルトの名無しさん:2006/10/08(日) 07:16:59
>>217
フィルタ使わずそんなもん発生する事できるのか
是非教えてくれ
219デフォルトの名無しさん:2006/10/09(月) 18:00:37
ちょークロックの早いPCM合成チップで生成
220デフォルトの名無しさん:2006/10/09(月) 18:54:49
ブラム・ブラム・シャブって乱度高そうだな
シャブ打ってラリってそうな響きだ
221デフォルトの名無しさん:2006/10/09(月) 23:00:54
>>218
例えば想像する対象をサイコロの目としてみる。
1から6まで均等にでる乱数なら可能だろ
その種類だけ格納するテーブルを作って
確立が高い部分か低い部分を再度乱数を求め補正するだけ
原始的な方法で昔から使われている。
記憶容量に依存するが、多重評価することで要求に対するバランスが測定
可能であれば、それを元に補正するだけでいい。
この方法だと周期はでるが、結果として分かっている周期を補正するのは
容易だろう。
任意の偏りがでるかスペクトルを測定し再評価すればいいだけの話だね。
222デフォルトの名無しさん:2006/10/10(火) 00:38:32
統計を取って補正すると、乱数じゃなくなるけど?
時系列で見ると偏ってるからね。
223デフォルトの名無しさん:2006/10/10(火) 00:45:37
もともと偏った確率で目が出る疑似乱数に、統計情報を加えて一様乱数にしようとすると、必ず波が出来るよ。
パチンコやスロット台で波が出来るのもこのせい。
224デフォルトの名無しさん:2006/10/10(火) 01:20:57
>>222
10年間同じ値が続いても乱数。無限に長い時間からすれば確率的には存在する。
そのぐらい理解しておけ
225デフォルトの名無しさん:2006/10/10(火) 01:23:04
>>223
元の擬似乱数にある偏りが表にでただけで偏りがすくないものなら
測定できるような波はでない。
それに波がでたとしてもそれをフィードバックさせるだけで補正は可能。
226デフォルトの名無しさん:2006/10/10(火) 01:25:25
まあ、224と225が別人で、まったく逆の方向を指してるのだけはわかった。
227222:2006/10/10(火) 01:39:12
>>224
統計を取って補正しちゃうと、それが不可能になるって言ってるんだけど?
228デフォルトの名無しさん:2006/10/10(火) 19:31:09
バカな俺に「一様では乱数とは言わない」の意味を教えて下さい。
一様乱数は一様ではないの?
229デフォルトの名無しさん:2006/10/10(火) 19:40:53
230デフォルトの名無しさん:2006/10/10(火) 23:18:00
一応乱数
231デフォルトの名無しさん:2006/10/13(金) 14:21:51
>>228
一様だと周期があるということになるのは理解できない?
一様乱数とは有限の範囲内では周期がないが、それ以上だと
周期がある乱数を言う。
>>224
それは自然乱数の本質だな
>>225
これは正規乱数の類だな。上のwikiに解説してあるからしっかり読んでおけ。
232228:2006/10/13(金) 17:44:49
>>231
>一様だと周期があるということになるのは理解できない?
はい。
「一様であること」とは「偏りがないこと」と理解しています。なので、
>それ以上だと
>周期がある乱数を言う。
「一様であること」と「周期があること」の関係が解らないでいるのです。
233デフォルトの名無しさん:2006/10/14(土) 01:15:08
数学出来なそうなニオイ…
234デフォルトの名無しさん:2006/10/14(土) 02:45:28
横レスで済まんが、俺もわからないんで、デキるあなたが解説してよ>>233
暗号と情報セキュリティのお勉強はしたけど、正直乱数はよくわからん
235デフォルトの名無しさん:2006/10/14(土) 03:09:53
>>231が何言ってるのかは全く不明だけど、

特定の有限回の試行での一様性が担保されているなら、
それは全く乱数ではない、というのは自明だと思う。

ところで、疑似乱数は内部状態を有限量のデジタルデータで
持つという仕組み上、有限の周期をもつこともまた自明。
なわけで、一様な疑似乱数=乱数ではない、ということになる。
のか?

一様だろうがそうでなかろうが、所詮周期があるという点で
「疑似」乱数でしかないわけだけど、一様性が担保されている
場合は、そうでない(一様かどうか不明な)場合と違って、
周期の終わりの方では次にでる数字を推定しやすくなる。
ギャンブルには使いにくい。
236デフォルトの名無しさん:2006/10/14(土) 08:34:34
普通のrandじゃいけない理由は?
237デフォルトの名無しさん:2006/10/14(土) 09:57:42
>>236 その「理由」を君が知りたい理由は?
238デフォルトの名無しさん:2006/10/14(土) 10:04:34
>>237日本語でおk
239デフォルトの名無しさん:2006/10/14(土) 13:11:10
ところで、
ttp://www.optoscience.com/maker/id/id.html
の真性乱数発生器ってのはホンモノなの?
熱雑音を利用したチップやボードはよく見かけるけど、
量子乱数ってのはあまり見かけないような気がするッス
どういう仕組みになってるんだろうか…
240デフォルトの名無しさん:2006/10/14(土) 13:58:00
周期が終わったら初期化すればいいじゃない
241デフォルトの名無しさん:2006/10/14(土) 14:48:04
>>236
いまどき普通のrandを使う理由は?
242デフォルトの名無しさん:2006/10/14(土) 14:50:22
>>241
いまどきじゃないrandが存在する理由は?
243デフォルトの名無しさん:2006/10/14(土) 17:37:21
>>242
いまどきじゃない方が便利だから
244デフォルトの名無しさん:2006/10/14(土) 17:40:53
便利かどうかで言えば、便利さは「同じ」だと思うな。
重要なのは、目的を達成するための手段として妥当かどうかだよ。
245デフォルトの名無しさん:2006/10/14(土) 23:00:51
少なくとも理不尽さを軽減する効果はある。

ユーザ「なんでここで○○が出て来るんだよ!ありえないだろ!!!」
開発者「MTですから、乱数に変な癖は無いですよ」
ユーザ「そうか・・・偶然じゃあしょうがないな・・・」

みたいな。
246デフォルトの名無しさん:2006/10/14(土) 23:20:35
Civシリーズの乱数FAQを思い出すナー
247デフォルトの名無しさん:2006/10/14(土) 23:36:06
メルセンヌ・ツイスタのホームページが存在しないんだけど
作者はもう慶応には居ないってこと?
248デフォルトの名無しさん:2006/10/14(土) 23:45:00
>>247
普通に"MT 乱数"とかでググれば出てくると思うが
249デフォルトの名無しさん:2006/10/16(月) 10:22:55
civの乱数には波がある
250デフォルトの名無しさん:2006/10/16(月) 12:05:45
すいません、昭和初期の国産バスの図面を探しているのですが、
適当な資料をご存じの方がいたら教えてください。
251228:2006/10/16(月) 15:19:19
>>235
>一様性が担保されているなら
…あ、そうか。やっぱ俺はバカでした。
ありがとうございます。ひとつ賢くなりました。
252デフォルトの名無しさん:2006/10/18(水) 17:36:16
>>251
本物?釣り氏?w
253デフォルトの名無しさん:2006/10/18(水) 18:18:59
一様性が担保されていても、長ーい周期の疑似乱数の最初の方だけ
使うんならあまり問題にならないような気がする。

40万組みのシャフルしたトランプから10枚だけ引くとか。
254デフォルトの名無しさん:2006/10/18(水) 20:06:33
ここまでの俺の理解:
(1)周期があるというのは、別に一様にしようがしまいが疑似乱数である限り言えること

(2)一様乱数の場合は、そうでない疑似乱数と比べて
      周期の終わりに近づくにつれてさらに予測しやすくなる

(3)>>231が前半二行で(1)以外の情報を伝えたかったのかどうかは不明
255デフォルトの名無しさん:2006/10/18(水) 23:53:23
一様乱数の意味を勘違いしてる人が多いな。

(正しく作られた)サイコロは過去の出目に関係なく、次にある数字が出る
確率はすべて等しい。= 一様である。
サイコロを続けて振って得られる数列は一様乱数になる。

ソフトウエアで生成する乱数が原理的に真性乱数になり得ないのは
まったく別の話。一様性とは無関係。
256デフォルトの名無しさん:2006/10/19(木) 03:41:58
なるほど、その勘違いした人が大声で解説すると。
悪貨が良貨を駆逐するとはこのことか。
257デフォルトの名無しさん:2006/10/19(木) 04:10:57
>>255
やっぱそうなのか
上の話を読んで
「サイコロを6回ふったら、1から6までの目がどれもぴったり1回出る」
が一様乱数かと思って焦ったよ
258デフォルトの名無しさん:2006/10/19(木) 11:45:46
>>255
疑似乱数の場合、
>確率はすべて等しい。= 一様である。
ものと、そうでないものがある、というのはわかっていますか?
259デフォルトの名無しさん:2006/10/19(木) 12:08:06
なんでこう自分の言いたい内容を明確に書かない臆病者が多いんだろうね?
ム板の特徴なのかな
260デフォルトの名無しさん:2006/10/19(木) 12:16:47
>>255
(有限の)周期があって、かつ一様な疑似乱数の特性について
教えてください。1周期内では各数字は同じ回数だけ現れますか?
261デフォルトの名無しさん:2006/10/19(木) 14:32:38
>>258
なぜ「過去の出目に関係なく」という部分まで引用しない。
重要なところだぞ。
また、間違ってると思ったらどこがどう間違ってるか書いてくれ。
262デフォルトの名無しさん:2006/10/19(木) 23:38:43
一度ギャンブル用のサイコロとかプログラムで作って、現金懸けていわゆる賭博でもしてみれば身にしみてわかるさw
263デフォルトの名無しさん:2006/10/20(金) 11:30:26
基本的に目的に使うものに影響がでない周期にして使えば問題ない。
厳密に一様というのは、愚かな考え。
1つの周波数に対して一様なのは可能だが。
264デフォルトの名無しさん:2006/10/20(金) 22:58:19
>>262
プロと対峙して「てめぇいかさまだな」とか言われた日には。
265デフォルトの名無しさん:2006/10/23(月) 11:35:42
>>264
その日を境に行方不明になると
266デフォルトの名無しさん:2006/10/25(水) 00:15:58
サイコロの目は1から6まで均等にはでない。これが物理現象。
理屈の上の乱数と実際に作れる乱数とは別なことを理解できないとは
愚かだよな。
理屈上のサイコロでも「有限回数」の出目は一様ではない事実、これが何故か
理解できないの池沼に説明しても無駄だから放置だw
267デフォルトの名無しさん:2006/10/25(水) 00:29:16
いや、単に「一様」という言葉を
「どの目も同じ回数出る」と誤解してる人がいて
勘違いしてる人もしてない人も混乱しただけだろ。
268デフォルトの名無しさん:2006/10/25(水) 00:51:09
>>267
どの目でも確率分布を一様にさせると言う事は、出る回数が同じになって行くと言う事じゃないのか?
269デフォルトの名無しさん:2006/10/25(水) 00:56:51
>>268
そうじゃなくてサイコロを600回振ったら100回1が出る
という意味の「同じ回数」。
出目が一様なサイコロを600回振っても1が100回じゃない
ことの方がずっと多い。
270デフォルトの名無しさん:2006/10/25(水) 01:02:53
>>269
100回でも99回でも101回でもいいけど、100回に近くするって事だろ?
99回ならもう一回出そうかな?とか、101回出てたら、もう控えようかな? とか、操作するんだよね?
271デフォルトの名無しさん:2006/10/25(水) 01:03:44
>>268
> どの目でも確率分布を一様にさせると言う事は、出る回数が同じになって行くと言う事じゃないのか?
全然違う。
たとえば、n回サイコロを投げて1の目が出た回数をk1、2の目が出た回数をk2とすれば、
nを大きくしていくと k1/n と k2/n はともに 1/6 に収束していく(大数の法則)が、
|k1-k2|の期待値は大きくなっていくんだよ。
272デフォルトの名無しさん:2006/10/25(水) 01:09:33
>>270
何の話だ?
まず、そういう操作をしたら一様でなくなってしまう。
過去の出目から未来がある程度予測できてしまうから。

で、そういう操作をする乱数の名前は知らない。
確かに、「誤用の一様」の意味はそれかも。
実用性はありそうだが、名前付いてる?
273デフォルトの名無しさん:2006/10/25(水) 01:20:30
>>272
ギャンブルマシンと言われるゲーム機やパチンコ台やスロットの中身
274デフォルトの名無しさん:2006/10/25(水) 14:07:29
サイコロは真性乱数。規則性とかないんだから、いつでも確率で語るしかない。
しかし、初期条件で全て決定される疑似乱数で各出目の出現回数が違ったら、
それは一様でないということなんじゃないの?


>>273
スロやパチはほとんど真性乱数とみて問題無いよ。
現在スロで主流の方法は、数MHzのクロックを16bitのカウンタで数えていて
レバーが叩かれた時にラッチするというもの。
カウンタが1周する周期が0.03秒とかだから、人間がレバーを叩いているかぎり
ほとんど真性乱数といえる。(だからソレノイドでレバーを叩いて狙う方法が存在する)
275デフォルトの名無しさん:2006/10/25(水) 23:49:24
>>254
> (2)一様乱数の場合は、そうでない疑似乱数と比べて
>       周期の終わりに近づくにつれてさらに予測しやすくなる
それは違う。

一様でない疑似乱数、たとえば"1"が1/2の確率で"2"〜"6"がそれぞれ1/10の確率で
出現する疑似乱数列があるとして、その周期の大半を消費したとき"1"の出現率が
1/2より小さければ、周期の残りでは"1"の出現率が1/2より大きくなる。

つまり、次にでる数字を推定しやすいのは、その疑似乱数列の周期と分布が
「既知」であり、その周期に対して十分な長さの過去の乱数列を知っている場合だってこと。
その既知の分布の種類は、一様分布でなく二項分布であってもいいわけだ。
276デフォルトの名無しさん:2006/10/26(木) 11:02:45
乱数は、完全な一様性を示さないものだろ、
サイコロの目のような有限の個数の値が
どの数も確立も一定なら真の乱数ではない。
単なるスペクトルの問題であり、長超周期の乱数を否定しなければ
短期間の乱数の一様性を守ることは不可能だろ。
おまいらが有限と思っている期間でさえ無限に近い乱数の価値観から
すれば短い期間であり、同じ値が続いたとしても確立の1つである。
短い期間が1億回同じ値が続くケースが存在したとしても、
乱数として間違いはない。
つまりだ、人間が扱える乱数とは有限回数の中でどの周波数成分でも
似た値を示すような数値を乱数と判断しているだけ。周期は確実にあり、
実用であるか、どうかの問題にしかすぎない。
プログラム板としては。ライブラリーが提供するような激しく短いビット
数の乱数を使うからこそ周期や特徴が出てしまうだけで、長い周期を
比較的単純なアルゴリズムで作れば問題はありえない。
円周率とか、無限級数でも使えw
277デフォルトの名無しさん:2006/10/26(木) 15:11:27
>>275
>それは違う。
中略
>つまり、次にでる数字を推定しやすいのは、その疑似乱数列の周期と分布が
>「既知」であり、その周期に対して十分な長さの過去の乱数列を知っている場合だってこと。

「違う」といいながら同じことを言っているような気がする。
278デフォルトの名無しさん:2006/10/26(木) 16:44:04
>>276
何を主張したいのかよくわからんが、
一様の説明で例に出したサイコロは理想的なサイコロで、
理想的なサイコロは完全な一様性を示す。
有限回振ることが前提でも一様性は変わらない。
>>270みたいのを一様だと思っているのか?違うぞ。

>>277
同じことは言ってないだろ。ちゃんと違うよ。
>>254は一様乱数の場合に予測できると書いていて、(←間違い)
>>275は周期と分布が既知の擬似乱数の場合に予測できると書いている。
279デフォルトの名無しさん:2006/10/26(木) 20:38:54
>>254は「周期の終わりの方では」と書いているんだから、
周期の終わりの方を使っていることが解る⇒周期が既知、
が前提なんじゃないのか?分布も「一様」が前提だし。
280デフォルトの名無しさん:2006/10/26(木) 20:58:11
>>279
ああ、そういうことか。
>>254(2)は、一様かつ周期があると言っているが、
これは言葉が矛盾してる。周期があったら一様じゃない。
ていうか擬似乱数は一様にならないだろ。
281デフォルトの名無しさん:2006/10/26(木) 21:28:23
指向性が無ければ一様といえる
282280:2006/10/26(木) 21:34:11
あ、ちょっと勘違いしてたかも。
>>275は周期のある擬似乱数に関して、
分布が既知ならそれが「一様分布でなくても」
予測ができる、と主張してるんだ。

>>254の勘違いは、一様の意味を>>268のように思っていること。
実際は>>271の言うように一様でも|k1-k2|の期待値は大きくなっていく。

更に、>>268のような数列は乱数ではあり得ない。
一様であるなしに関わらず乱数ならば過去の数列から予測は不可能。
逆に擬似乱数の場合、分布が一様でも何でも既知ならある程度予測ができる。

ということは、>>255も誤解を招く表現だ。
サイコロで次に出る目が過去の出目に関係ない=乱数
サイコロでどの目が出る確率も同じ=一様
擬似乱数に対して一様という言葉を使うかどうかは知らないが、
乱数であるならば既に過去の出目には関係ないので、
過去の出目に関係ないことを言うのに一様を主張する必要はない。
283デフォルトの名無しさん:2006/10/26(木) 21:48:58
はっきり言って俺最強すぎて我慢できない
284デフォルトの名無しさん:2006/10/27(金) 00:38:08
>>282
勘違いしているなら、「あ、ちょっと勘違いしてたかも。」は
常識が無い発言だよなw
285デフォルトの名無しさん:2006/10/27(金) 02:02:26
一様性を検査しなくていいの?
286デフォルトの名無しさん:2006/10/27(金) 02:07:39
>>285
一様性を「証明」する方が重要じゃないの
287デフォルトの名無しさん:2006/10/27(金) 23:14:52
>>254=>>257です
>>254は「この人はこう言いたかったのかな?」と予想して書いたものなんで悪しからず

>>276
>短い期間が1億回同じ値が続くケースが存在したとしても、
>乱数として間違いはない。

確率分布が一様分布な確率変数のとる値が、たまたま一億回同じ値だったとしても
それは乱数ってことですよね。
(ここのほとんどの人は最初からそれは了解してるように思う)


>つまりだ、人間が扱える乱数とは有限回数の中でどの周波数成分でも
>似た値を示すような数値を乱数と判断しているだけ。

何か数列があって、それがバラバラな値の列だから乱数だ、そうでないから乱数じゃない、ってのは
そもそも違うってことですよね?
「どうやって採られたものか」が重要である、と。

んで
・有限長の数列を用意して、それを乱数として使う場合は
  統計的に値の出現頻度が偏っているときに、それを補正することもある

・疑似乱数は有限の長さの数列の後に同じ数列の繰り返しになる

この二点がとりあえず事実ということでおk?
288デフォルトの名無しさん:2006/10/27(金) 23:15:59
訂正

×疑似乱数は
〇疑似乱数生成器の出力は
289デフォルトの名無しさん:2006/10/28(土) 01:02:27
粘着しているのは極度に短い周期の擬似乱数=ライブラリーに付属しているような
ものを利用して乱数の一様性を補正すれば、乱数ではなくなるように勘違い
しているとかか?
極度に短い擬似乱数ではなく、極度に長い周期の乱数を用いて、目的の
一様性が保たれれば変な癖などでないだろ。元にしている擬似乱数が
貧弱すぎるじゃまいか?
290デフォルトの名無しさん:2006/10/28(土) 08:19:35
>>287
>統計的に値の出現頻度が偏っているときに、それを補正することもある
どういう補正を考えてるの?

「1が続いたので次に1が出る確率を減らす」ような処理ならばNo。
そのような数列は乱数とは呼ばない。
乱数とは過去のデータにかかわらず常に一定の確率分布を持つもの。

計算によって異なる確率分布の乱数を作る事はある。
例えば、一様分布の乱数を利用して正規分布の乱数を得る等。
291デフォルトの名無しさん:2006/10/30(月) 01:03:45
有名な同じ値が続かない乱数の作成方法として。
基本の擬似乱数発生から乱数がでる目の数だけ記録
(1から1000なら1000ビット)
同じ値が出た場合は出てないビットがでるまでか、適当な位置から
出ていない数値を検索しそれを乱数とする。
この場合だと1000回の周期があるが1000回中は同じ値がでないように
できる。
1から1000まで同じ確立で発生し、その発生根本は別の擬似乱数など
から流用すればいい。
これは表面上は同じ値が続かないし元の擬似乱数が乱数的であれば
それなりに使える、例えばシャッフル再生などの音楽プレーヤーの
アルゴリズムなどで採用されている例がある。
292デフォルトの名無しさん:2006/10/31(火) 17:45:56
>>291
それがFA?
293デフォルトの名無しさん:2006/10/31(火) 22:32:18
>280
>>>254の勘違いは、一様の意味を>>268のように思っていること。
>実際は>>271の言うように一様でも|k1-k2|の期待値は大きくなっていく。

それは真の乱数の話ではないでしょうか。
このスレでは疑似乱数についてだけ話すようにしないと混乱の元では?
>>更に、>>268のような数列は乱数ではあり得ない。
これも同様。
294デフォルトの名無しさん:2006/10/31(火) 22:41:15
>>291
それは乱数というよりシャフルというかなんというか。

それはともかくとして、確率分布を補正する方法としては
目的の分布をもつ真の乱数列からなる適当なサイズの乱数表があれば、
疑似乱数でその表のn番目を拾ってゆくような方法があるような気がする。

どれくらいの大きさの表が必要なのかはよく分からないけど。
295デフォルトの名無しさん:2006/10/31(火) 22:47:13
ループしすぎ
296デフォルトの名無しさん:2006/10/31(火) 23:11:02
>>293
その通りだ。混乱しそうな場合は単に乱数と言わず、
「真の乱数」「擬似乱数」と言った方がいいね。
>>282は真の乱数のつもりで話している。

擬似乱数に対して一様という言葉を使ったら、
単に擬似乱数の周期の中でどの数が出る回数も同じという意味だよな。
1,2,3,4,1,2,3,4,・・・という周期的な擬似乱数(質は最悪だが)も、一様ということになる。
こういう使い方は正しい?
297デフォルトの名無しさん:2006/10/31(火) 23:26:51
>>296
> 1,2,3,4,1,2,3,4,・・・という周期的な擬似乱数(質は最悪だが)
そこまで短い周期の数列を「擬似乱数」と呼ぶのは変だと思う。
「擬似」乱数なんだから、ある程度は真の乱数の代替に使えるくらいの
性質を持ってないと。

だから、ちょっとやそっとじゃ一周できないくらいの長い周期を持っていることは
「擬似乱数」と名乗るための重要なファクターだと思う。
298デフォルトの名無しさん:2006/10/31(火) 23:30:17
>>297
つまり、ある程度乱数っぽい列に対しては
一様乱数という言葉を296の意味で使っていいということ?
299デフォルトの名無しさん:2006/10/31(火) 23:58:37
おまいら、円周率つかえ。
300デフォルトの名無しさん:2006/11/01(水) 00:24:54
円周率やルート2って、真の乱数と言えないような要素ある?
1億桁目までの数字の偏りとかじゃなくて、本質的にわかっている部分で。
301デフォルトの名無しさん:2006/11/01(水) 00:43:21
円周率は、任意の桁までは計算によって求める事が可能。
今まで出た数値が円周率の数値と同じならば、次に出る数値は計算によって算出可能。
この事は、予測可能な事を意味する。
よって乱数ではない。
302デフォルトの名無しさん:2006/11/01(水) 01:37:13
>>301
下手な疑似乱数より周期長くていいぞw
303300:2006/11/01(水) 01:42:15
>>301
> 今まで出た数値が円周率の数値と同じならば、次に出る数値は計算によって算出可能。
円周率に近い別の無理数かもしれない。例えばπ+1/√(10^1000+1)とか。

で、俺が聞きたかったのはそういうことではなくて、
例えば円周率の10^1000+1桁目から10^1000+10^20桁目までの列と、
真性乱数の10^20個の列を与えられたときにある程度の区別が付くか、ということ。
わかりにくくてスマソ。
304デフォルトの名無しさん:2006/11/01(水) 06:39:59
真正な乱数ならどんな数列でも出現する可能性はあるわけで、
数列だけを比較して区別するなんて不可能でしょ。
305デフォルトの名無しさん:2006/11/01(水) 08:08:48
>>304
そんなことはわかっている。
だが、例えば「1の後には2が来やすい」のような傾向があれば
十分な長さの列があればほぼ確実に判定できるだろ。
306デフォルトの名無しさん:2006/11/01(水) 09:02:29
わかっているなら聞くまでもないじゃん。
307デフォルトの名無しさん:2006/11/01(水) 23:39:31
大学教授、円周率を計算し過ぎて逮捕
ttp://www.faireal.net/articles/4/23/#d60401
308デフォルトの名無しさん:2006/11/01(水) 23:53:09
>>307
あのカスラックなら本当に言い出しかねんな
309デフォルトの名無しさん:2006/11/02(木) 00:34:57
>>301
無限に続くものは任意の桁まで計算できない。
理由は、計算するまでに宇宙が終わるw
人類も機械も消える。
愚かだなw
310デフォルトの名無しさん:2006/11/02(木) 00:48:07
「任意の桁はどこにしますか?」
「無限桁目にします」
311デフォルトの名無しさん:2006/11/02(木) 01:07:13
バカだな 宇宙が終わるなんて都市伝説だよ
312デフォルトの名無しさん:2006/11/02(木) 01:47:41
宇宙が意思、知能を持っていて、宇宙自身が算術を可能という説もある。
というのは、ガセ。
313デフォルトの名無しさん:2006/11/02(木) 02:56:59
42
314デフォルトの名無しさん:2006/11/02(木) 03:57:58
42 :デフォルトの名無しさん :2006/05/04(木) 08:51:13 
要するにマンコ 
315デフォルトの名無しさん:2006/11/02(木) 14:23:01
地面は平らだ。丸いわけがない。
象が支えて亀が歩いているんだ。
宇宙があるなんて都市伝説だ。
316デフォルトの名無しさん:2006/11/02(木) 20:25:42
人間なんて居るわけが無い。
これは全部俺の妄想だ、夢だ。
317デフォルトの名無しさん:2006/11/03(金) 04:02:16
>316
お前今「嘘」ってWOP使うの避けたろ
318デフォルトの名無しさん:2006/11/03(金) 12:40:49
何で擬似乱数程度でこれほど燃えるんだよ、馬鹿ばっかりだなw
319デフォルトの名無しさん:2006/11/03(金) 12:57:37
燃えてるように感じてるのは多分お前だけ
320デフォルトの名無しさん:2006/11/04(土) 02:58:27
319みたいなDQNばかりだけど勘弁してやれ>318
321デフォルトの名無しさん:2006/11/04(土) 04:25:47
折角萌えるなら擬人k
322デフォルトの名無しさん:2006/11/06(月) 00:48:31
とうとう煽り愛のスレに成り果てましたか?
323デフォルトの名無しさん:2006/11/10(金) 15:09:58
>>294
短い周期なら乱数だろ?0と1の2種類とかw
324デフォルトの名無しさん:2006/11/10(金) 17:27:29
>>291
最初は[1,n]の乱数で、次は[1,n-1]の乱数…と発生させてその出力を使えば同じこと。
325デフォルトの名無しさん:2006/11/23(木) 11:03:50
で、おまいらがほしい乱数とは、数値が連続せず、どの数値も同じ確立に
なりやすい擬似乱数だろ?
プロセッサのリヤルタイムクロックに同期するようなプログラムはほぼ
困難というか事実上は不可能だろうから
それでも利用すればいいんじゃないか?連続に高速で利用する場合も
考慮して乱数テーブルでも用意してミックスすればよさげ。
326デフォルトの名無しさん:2006/11/23(木) 11:06:39
327デフォルトの名無しさん:2006/11/23(木) 12:08:13
時計もないしメモリの状態も常に一定の環境で
擬似乱数を発生させたいんだけど
不確定要素が無いので種がいつも同じなので
動作が常に一定になってしまい
擬似乱数にならないのです
どうしたらいいのでしょうか?
328デフォルトの名無しさん:2006/11/23(木) 13:45:00
サイコロ振って手入力
329デフォルトの名無しさん:2006/11/23(木) 13:55:21
外部要因で動作・変化する何かがないとムリだっぺ
330デフォルトの名無しさん:2006/11/23(木) 14:10:35
>>327
よく使う手だけど
メモリをちょっと壊す
331デフォルトの名無しさん:2006/11/23(木) 15:13:12
>>327
人間に2回何かさせる。
332デフォルトの名無しさん:2006/11/23(木) 15:15:11
>>327
原理的に不確定要素が必要だから、何とかするしかない。
メモリ状態、ユーザの入力、CPUjの状態、
それでもダメなら種を予め手入力しておく。
333327:2006/11/23(木) 16:19:37
やはり不確定要素が必要なのですね
アドバイスありがとうございました
334デフォルトの名無しさん:2006/11/23(木) 20:23:10
そこでUSBガイガーカウンタですよ。
335デフォルトの名無しさん:2006/11/26(日) 12:39:36
擬似乱数の萌え擬人化希望
336デフォルトの名無しさん:2006/11/26(日) 17:18:11
> メモリの状態も常に一定
ずっとHLTでもしてるのか?
337デフォルトの名無しさん:2006/11/26(日) 18:21:36
>>336
初期値がクリアされているシングルスレッドではないかと・・・
いや、やっぱずっとHLTかな・・・
338デフォルトの名無しさん:2006/11/28(火) 05:08:43
>>332
昔と違ってOSが動いているPCなら普通に不確定要素のタイミングで
動いている。
CPUコアのリヤルタイムクロックとアイドリングで動くカウンター要素
等を組み合わせても不確定要素を簡単に抽出可能だろ。
ワンチップマイコンや電子回路程度では話は変わってくるだろうけどな
339デフォルトの名無しさん:2006/11/28(火) 05:11:25
時計もないしメモリの状態も常に一定の環境
340デフォルトの名無しさん:2006/11/28(火) 08:05:30
リヤルタイム
341デフォルトの名無しさん:2006/11/28(火) 13:50:36
>>334
プーチン政権を批判するロシア人に持たせれば
良質な乱数が作れそうだな。
342デフォルトの名無しさん:2006/11/28(火) 14:57:40
>>341
All1で乱数にならない罠。
343デフォルトの名無しさん:2006/11/29(水) 16:51:41
擬似乱数なんてストリーム暗号の出力使えばいいじゃん
344デフォルトの名無しさん:2006/11/30(木) 12:06:53
マリーアントワネット様キタ
345デフォルトの名無しさん:2006/12/02(土) 22:43:18
>>325
>で、おまいらがほしい乱数とは、数値が連続せず、どの数値も同じ確立に
>なりやすい擬似乱数だろ?

このへんが少し困るところだよな。
人によっては(もしかするとかなり多くの人が)その方がランダムだと
思っちゃうんだよな。
もしサイコロで6が5回位続いたら仕込んであると怪しまれそう。
同じ目が続かない方が乱数としてはおかしいんだけどな。
短周期で目の分布がいつも揃ってたらそれもおかしいし。
52314ときたら次は6だろうみたいな。
人の感じる乱数性は真の乱数性とは違うんだろう。
346デフォルトの名無しさん:2006/12/03(日) 22:06:11
音楽のランダム再生などは、真の乱数性ではなく、
人がランダムと感じることこそが重要だが、
こういう擬似乱数列を得る手法で有名どころとかある?
347デフォルトの名無しさん:2006/12/03(日) 22:46:36
>>346
単なるシャッフル再生じゃダメなのけ?
348デフォルトの名無しさん:2006/12/03(日) 23:13:51
シャッフルといってもいろいろあるべさ。
某MP3プレーヤのシャッフルリピートは同じ曲を3回繰り返したし、
某なんとかシャッフルのシャッフルリピートは同じ曲を一回おきに3回繰り返した。
349347:2006/12/03(日) 23:41:42
ランダム再生とシャッフル再生を区別しているプレイヤーもあるな。

ランダム再生
… 一曲終わるたびに、次に再生する曲を全プレイリストの中からランダムに選ぶ。
シャッフル再生
… 再生開始時にプレイリストの一覧をシャッフルしたものを内部的に作り、
その順序にしたがって再生する。プレイリストの全曲を再生し終わったら
もう一度プレイリストをシャッフルする。

この分類だと、>348のようなことはランダム再生だと起こりうるが、
シャッフル再生だと起こらない。
350デフォルトの名無しさん:2006/12/03(日) 23:54:15
>>347
言われてみればそうだな。連続出現の心配はなくなるわけだ。
あとで思い出したが、同じアルバムの曲が10曲中3曲もあるから
ランダムじゃないと感じることもある。
まあこれもバラし方を考えればいいだけで、
乱数の発生方法とは関係ない話だったな。
351デフォルトの名無しさん:2006/12/04(月) 11:10:31
>>346
>>324みたいな乱数列を作ればいい訳で
352デフォルトの名無しさん:2006/12/05(火) 13:57:14
>>345
擬似乱数なんだから乱数を元にしたシャッフルで問題ないだろ。
現実のサイコロにしても目の数の周期性はあるわけだし。
※理論的なサイコロではない。
単に乱数に拘るのは周期が短いライブラリーなどにある乱数関数を使うと
規則性が表面に出て見えることがある。
この点であると思う。真の乱数であるなばら規則性が目立っても
それは一時的(数年続いても無限からすれば極短期間)な挙動であって
乱数である。
何かの規則で一様性な分布がほしいのであれば「無限級数」等を使えば
言い訳で、人間から見て一様乱数にみえるのはシャッフルがもっとも
近いものじゃないか?
353デフォルトの名無しさん:2006/12/05(火) 18:28:56
>>352
ぐだぐだな日本語に気持ち悪くなってくる。

>擬似乱数なんだから乱数を元にしたシャッフルで問題ないだろ。
シャッフルな用途にはシャッフルで問題ない。シャッフルでは困る用途もきっとある。

>現実のサイコロにしても目の数の周期性はあるわけだし。
現実のサイコロに周期性など無い。ってか「目の数の周期性」って何?

>単に乱数に拘るのは周期が短いライブラリーなどにある乱数関数を使うと
>規則性が表面に出て見えることがある。
この文は「周期が短い乱数関数を使うと規則性が見える。」でよいか?
(冒頭の「単に乱数に拘るのは」はなんなんだろう?)

>この点であると思う。
何が??

>真の乱数であるなばら規則性が目立っても
>それは一時的(数年続いても無限からすれば極短期間)な挙動であって
>乱数である。
最後の「乱数である。」はいらない。「挙動である。」で締めましょう。

>何かの規則で一様性な分布がほしいのであれば「無限級数」等を使えば言い訳で、
無限級数なんて関係無いでしょう。級数=数列の和 ですよ。

>人間から見て一様乱数にみえるのはシャッフルがもっとも
>近いものじゃないか?
人がどう見るかなんて、その人によるとしか言えない。
一巡するまで同じものが出ないものは一様乱数にみえないって人もいるだろう。
354デフォルトの名無しさん:2006/12/06(水) 00:16:44
ところで↓こういうネタがあるんだが、どう思う?
ttp://bugfix.jp/blog/culdceptsaga/2006/12/post_42.html
355デフォルトの名無しさん:2006/12/06(水) 10:33:38
>>353
釣り氏?
356287:2006/12/06(水) 15:34:10
>>290

>>統計的に値の出現頻度が偏っているときに、それを補正することもある
>どういう補正を考えてるの?

全然わからないです.というか

>「1が続いたので次に1が出る確率を減らす」ような処理ならばNo。
>そのような数列は乱数とは呼ばない。
>乱数とは過去のデータにかかわらず常に一定の確率分布を持つもの。

私もそう思う(そういう定義しか知らない)ので・・・
357デフォルトの名無しさん:2006/12/08(金) 23:57:04
>>356
ここは擬似乱数のところだから、真の乱数、つまり論理的な真の乱数を
言うのならそれなりの説明が必要とおもわれる。
実際に必要とされるのは真の乱数ではなく、擬似乱数であり
擬似乱数にはいろいろ種類があり、用途別に話しを展開しなければ
無意味な議論じゃないのか?
358デフォルトの名無しさん:2007/01/06(土) 20:21:25
ほしゅ
359デフォルトの名無しさん:2007/01/31(水) 23:01:07
>>330
しょ、詳細を…
360デフォルトの名無しさん:2007/02/01(木) 22:52:43
>>359
カオスのバタフライ現象を簡易化した形を使うのが簡易です。
シフトとビット操作で比較的簡単に作れる。
放送大学で具体的手法まで解説していたよ。
全体を均一にしたい場合はCDプレイヤーなどで
使われるシャッフルのアルゴリズムが一番簡易です。
0〜999の間なら1000ビットのRAMが最低必要になりますが。
361デフォルトの名無しさん:2007/02/02(金) 08:09:20
CDプレイヤのシャッフルと言うと、実装方法によってばらつきがまちまちということですか?
#中には同じ曲が連続しやがるCDプレイヤも一回置きに繰り返すCDプレイヤもあるのだが。
362デフォルトの名無しさん:2007/02/02(金) 08:46:34
それはシャッフル再生ではなくてランダム再生?
363デフォルトの名無しさん:2007/02/02(金) 09:17:28
シャッフル再生と言い張りつつ>361のようなのはあるね。iPodShuffleも所謂シャッフルじゃないし。
364デフォルトの名無しさん:2007/02/02(金) 16:31:17
Winampは完全なオプションでシャッフルから完全なランダムまで変化の度合いを設定できるんだよな
Morph Rateとか名づけてたっけ
365デフォルトの名無しさん:2007/02/02(金) 16:32:05
すまん1行目訂正

Winampはオプションで完全なシャッフルから完全なランダムまで変化の度合いを
366デフォルトの名無しさん:2007/02/02(金) 22:52:08
>>361
シャッフルを正しく実装しているものは同じ曲をバラバラにすべての曲を
1回づつ再生する機能のこと。
ランダム再生をしているのにシャッフルと名前を付けている
のは単に誤訳か、まがい物じゃないか?
http://e-words.jp/w/E382B7E383A3E38383E38395E383ABE5868DE7949F.html
367デフォルトの名無しさん:2007/02/02(金) 22:54:16
公取委かJAROに訴えればいいのそれ?
368デフォルトの名無しさん:2007/02/02(金) 23:50:08
>>366
iPodShuffule訴えてくれ。
369デフォルトの名無しさん:2007/02/03(土) 22:08:43
>>368>>367
アップルに騙されたオマイがDQN
370デフォルトの名無しさん:2007/02/11(日) 10:15:46
最も単純で低精度な擬似乱数の作り方てどこかにない?
371デフォルトの名無しさん:2007/02/11(日) 10:25:27
どんなアルゴリズムでも擬似乱数と言い張れば、それは擬似乱数
372デフォルトの名無しさん:2007/02/11(日) 10:53:43
373デフォルトの名無しさん:2007/02/11(日) 11:21:27
もっとも単純なわけでも低精度なわけでもないが
地球上でもっとも虐げられている擬似乱数アルゴリズムは
やっぱ線形合同法なんじゃね?
374デフォルトの名無しさん:2007/02/11(日) 18:07:28
>>370
5かけて1足してffでマスク
375デフォルトの名無しさん:2007/02/14(水) 06:24:21
>>370
擬似バタフライ効果があれば何でもいいんじゃない?
376デフォルトの名無しさん:2007/03/06(火) 15:47:49
>>370
常に定数を返す擬似乱数がもっとも周期が短い。
これより周期の短い擬似乱数はない。
377デフォルトの名無しさん:2007/03/06(火) 22:46:09
何も返さない擬似乱数
378デフォルトの名無しさん:2007/03/07(水) 07:58:43
何も返さない擬似乱数は周期が短いとは言えない。
何も返さない擬似乱数は分布が偏っているとは言えない。
何も返さない擬似乱数は擬似乱数テストプログラムをテストするために使えない。
370の目的はたぶん最後のコレ。
379デフォルトの名無しさん:2007/03/07(水) 20:58:47
>>376
定数ってだけじゃなく1bitであるべき(どうしても int にするなら 0 or -1)だろうな。
そうじゃないとbit単位のストリームとして見たときにbit数分の周期が存在することになる。
380デフォルトの名無しさん:2007/03/08(木) 08:13:45
うむ、0と1の分布という点からも0か-1であるべきだな。
そして、0超過状態からの脱出という観点からは0であるべきだな。
381171:2007/04/10(火) 04:02:15
いつのまにやらSIMD対応ほかいろいろ改良してるモノが出てるな。
まあ俺が以前いってたSIMD対応はメモリ上の並びをパズルみたいにコチョコチョいじるだけで
メモリ使用量も増やさず意外と簡単にできたんだが、
それ以外の改良となると、やっぱじっくり研究しないといかんわな。
悔しいが現役の学生にはかなわん。これは認めておいて、
とりあえずコード読んで高速化の余地を探すとするか。
382デフォルトの名無しさん:2007/04/10(火) 04:26:31
どっちの乱数の方が優れているか判定をおしえろ
383382(乱数の精度判定):2007/04/10(火) 05:08:58
#include <stdio.h>
#include <stdlib.h>
#define N 2147483647
#define kaisu 10000000
#define PI 3.141592653589

unsigned int ransuusyokiti=1;
double rnd(){
ransuusyokiti=(int)(1664525*(double)ransuusyokiti+1013904223)&N;
return ransuusyokiti/((double)N+1);}

int main(){
unsigned int i;
double n=0.0,x,y;
for(i=0;i<kaisu;i++){
x=rnd();y=rnd();
if(x*x+y*y<=1.0)n+=1;}
printf("自前のrandの精度(値が小さいほど良い) %1.9f\n",4*n/kaisu-PI);

n=0.0;
for(i=0;i<kaisu;i++){
x=rand()/(RAND_MAX+1.0);y=rand()/(RAND_MAX+1.0);
if(x*x+y*y<=1.0)n+=1;}
printf("  Cのrandの精度(値が小さいほど良い) %1.9f\n",4*n/kaisu-PI);

return 0;}
384382 改良版:2007/04/10(火) 05:40:20
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 2147483647
#define kaisu 50000000
#define PI 3.141592653589

unsigned int ransuusyokiti=1;double rnd(){
ransuusyokiti=(int)(1664525*(double)ransuusyokiti+1013904223)&N;
return ransuusyokiti/((double)N+1);}

double 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(double)( w=(w^(w>>19))^(t^(t>>8)) )/4294967296; }

double xorHoge(){
static unsigned long x=123,y=456,z=78,w=90;unsigned long t;
t=(x^(x<<13));x=y;y=z;z=w; return(double)( w=(w^(w>>7))^(t^(t>>5)) )/4294967296; }

main(){unsigned int i,t;double n,x,y;
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xor128();y=xor128();if(x*x+y*y<=1.0)n+=1;}
printf(">>18のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xorHoge();y=xorHoge();if(x*x+y*y<=1.0)n+=1;}
printf(">>84のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=rnd();y=rnd();if(x*x+y*y<=1.0)n+=1;}
printf("自前のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=rand()/(RAND_MAX+1.0);y=rand()/(RAND_MAX+1.0);if(x*x+y*y<=1.0)n+=1;}
printf("  Cのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);}
385382 :2007/04/10(火) 05:43:38
Cの標準がかなりいいんだが

>>18のrandの精度(値が小さいほど良い) 0.000233346 生成速度8.329000秒
>>84のrandの精度(値が小さいほど良い) 0.000106306 生成速度8.171000秒
自前のrandの精度(値が小さいほど良い) 0.000263426 生成速度19.563000秒
  Cのrandの精度(値が小さいほど良い) 0.000001454 生成速度9.734000秒
386CryptGenRandomはいまいち:2007/04/10(火) 06:28:12
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <time.h>
#define N 2147483647
#define kaisu 200
#define PI 3.141592653589

double win_rand(){
HCRYPTPROV hProv;BYTE b[4];
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
CryptGenRandom(hProv, 4, b);CryptReleaseContext(hProv, 0);
return (double)(b[0]+(b[1]<<8)+(b[2]<<16)+((b[3]&127)<<24))/2147483648;}

double 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(double)( w=(w^(w>>19))^(t^(t>>8)) )/4294967296; }

double xorHoge(){
static unsigned long x=123,y=456,z=78,w=90;unsigned long t;
t=(x^(x<<13));x=y;y=z;z=w; return(double)( w=(w^(w>>7))^(t^(t>>5)) )/4294967296; }

main(){unsigned int i,t;double n,x,y;
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xor128();y=xor128();if(x*x+y*y<=1.0)n+=1;}
printf(">>18のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=xorHoge();y=xorHoge();if(x*x+y*y<=1.0)n+=1;}
printf(">>84のrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=rand()/(RAND_MAX+1.0);y=rand()/(RAND_MAX+1.0);if(x*x+y*y<=1.0)n+=1;}
printf("  Cのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);
n=0.0;t=clock();for(i=0;i<kaisu;i++){x=win_rand();y=win_rand();if(x*x+y*y<=1.0)n+=1;}
printf(" winのrandの精度(値が小さいほど良い) %1.9f 生成速度%f秒\n",fabs(4*n/kaisu-PI),(double)(clock()-t)/1000);}
387デフォルトの名無しさん:2007/04/10(火) 12:22:01
コード直貼りもいいが、うpろだを活用してくれ
388デフォルトの名無しさん:2007/04/11(水) 01:36:14
ム板的にはwikiのが良くね?
389デフォルトの名無しさん:2007/04/11(水) 02:34:04
疑似乱に周期があるから、パイで検定するときは、1000回、10000回、と増やして
いって近似がパイに近づかなくなる回数を調べる事も重要
390デフォルトの名無しさん:2007/04/11(水) 16:34:53
擬似乱数のことを擬似乱と略す人間は初めて見た
391デフォルトの名無しさん:2007/04/11(水) 21:27:44
>>386
この精度がいいと(あるいは悪いと)どういう乱数ってことになるの?
あと、なんで win_rand() だけ 1 bit 捨ててんの?
392デフォルトの名無しさん:2007/04/16(月) 16:57:12
>>391
円周率は、3.1415である
正方形(サイズは40000とする)の内部にランダムに
点を4万回打てば、それに内接する円の内部に点が打たれる回数は
31415回程度になる
試行回数を増やせば増やすほど円周率にちかずく
ここで乱数の生成が均等であるほど近くなる
393デフォルトの名無しさん:2007/04/16(月) 20:00:37
このスレは共立版 knuth の3巻を読んでる事を前提にしていいんですよね?
394デフォルトの名無しさん:2007/04/16(月) 20:59:09
>>392
d。

win_rand() で 1 bit 捨ててんのはなんで?
395デフォルトの名無しさん:2007/04/16(月) 21:15:24
捨てないと符号関係のエラーがでるんだが
396デフォルトの名無しさん:2007/04/16(月) 21:25:48
>>395
それはなんかチョンボってないか?
俺んとこじゃ
return (double)(b[0]+(b[1]<<8)+(b[2]<<16)+(b[3]<<24))/4294967296;
で、エラーにはならんし。kaisu を 1000000あたりで試行した時は
win_rand() が断トツの精度を誇るぞ。

# 処理に要する時間も断トツだけどw
397デフォルトの名無しさん:2007/04/16(月) 22:10:39
>>393
共立じゃなくてサイエンス社
398デフォルトの名無しさん:2007/04/16(月) 22:12:25
boost::random::mersenne_twisterはだめなん?
399デフォルトの名無しさん:2007/04/17(火) 01:51:37
ダメじゃないよ。
というか実質的には最強。
とりあえずwikiでも読んでみなよ。
400デフォルトの名無しさん:2007/04/17(火) 07:06:41
もっとすごいのあるよ
SIMD-oriented Fast Mersenne Twister (SFMT):
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
401デフォルトの名無しさん:2007/04/17(火) 19:30:13
WELLの登場で次世代の擬似乱数は混沌とするかと思ったが、
これでしばらくMTの系譜が続くのは確定だな
402デフォルトの名無しさん:2007/04/17(火) 22:40:44
周期長っ!
403デフォルトの名無しさん:2007/04/18(水) 00:14:07
404デフォルトの名無しさん:2007/04/18(水) 10:51:22
boost::random::mersenne_twister「メモリぱくぱく おいちい^^^^」
405デフォルトの名無しさん:2007/04/19(木) 20:33:08
>>402
>>404
だからSFMTでは短周期版も作ったんじゃないか
406デフォルトの名無しさん:2007/07/04(水) 20:56:27
SFMTのboost対応版マダー?
407デフォルトの名無しさん:2007/07/08(日) 00:18:50
Twister 系の擬似乱数て
単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。
適度に内部ビット数増やせば、周期なんて測定不能な域にするのは容易じゃん。
ワンチップとかの超小型マイコンで作るんじゃないんだし、今のPCなら
乱数で使うメモリは捨てるほどあるわけだしな。
408デフォルトの名無しさん:2007/07/08(日) 00:29:35
>単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。
それを実装したことに意味があるんじゃん。
…って開発者が言ってた。
409デフォルトの名無しさん:2007/07/09(月) 23:43:55
>>408
似た事を主張した奴とか類似物を作ったやつも、正式に論文発表しなかった
だけにすぎない。
410デフォルトの名無しさん:2007/07/10(火) 09:47:42
コロンブスなんて西に航海しただけ。コロンブスがしなくても誰かがやったよね。
411デフォルトの名無しさん:2007/07/10(火) 09:52:53
コロンブスってタダの方向音痴なんじゃないかと思う
412デフォルトの名無しさん:2007/07/10(火) 10:22:53
「西に向かえば地球は丸いそうだからアジアに辿り着ける筈だ」と言う発想は方向音痴とはいえまい。
413デフォルトの名無しさん:2007/07/10(火) 13:30:58
西に向かって最初に見つけた陸地を西インド諸島と名付けるのはどうか。
せめて西ジパング諸島と呼ぶべきだったと思う。
414デフォルトの名無しさん:2007/07/10(火) 15:29:18
コロンブス以前に原始人が海をわったったという遺伝子が原住民の
遺伝子確認で分かっている点について(ry
415デフォルトの名無しさん:2007/07/10(火) 20:29:40
同時代に同じことを考えた香具師はいっぱいいる
コロンブスチームのマーケティングの勝利
416デフォルトの名無しさん:2007/07/10(火) 20:40:37
このビルのガラス窓は頑丈だと証明しようと体当たりしてぶち破って死んだ弁護士もいたな
417デフォルトの名無しさん:2007/07/11(水) 01:10:25
>>416
荒縄静香を思い出した

確かWeb魚拓は取っといたはずだけど どこいっちゃたtかな
418デフォルトの名無しさん:2007/07/11(水) 01:16:28
【総連】「安倍一味には負けない」総連弾圧に対して措置取る…朝鮮外務省代弁人声明
ttp://news21.2ch.net/test/read.cgi/news4plus/1183572310/l50
419・∀・)っ-○◎●:2007/07/11(水) 01:22:51
>>406
斉藤君に連絡とってみるかな。
個人的にはSSE2非対応CPU向けにMMX版くらいは欲しいんだが。

本人が動いてくれるくれないにかかわらず、SSE2版だけならVC8/ICC用の
クラスを作ってみようと思うが。どうせ俺が使うし。
420デフォルトの名無しさん:2007/07/11(水) 01:28:04
で、SCEからオファーはきたの?
421・∀・)っ-○◎●:2007/07/11(水) 01:34:19
音沙汰無いよ
422・∀・)っ-○◎●:2007/07/11(水) 01:59:55
Cスタイルのコーディングってさ、どうしてグローバル変数汚染しようとするのかねぇ。
スレッド毎にインスタンス生成すればスレッドセーフうめぇwwww
423デフォルトの名無しさん:2007/07/11(水) 02:17:06
スタックに作ればいいやん
424・∀・)っ-○◎●:2007/07/11(水) 07:26:20
たとえばさ、MTのgenrand()を複数のスレッドから参照してみてごらん。必ずおかしなことがおきます。
BoostのRNGは全部クラス化してあって一時計算領域もインスタンス毎に生成するからスレッドセーフなのよ

425デフォルトの名無しさん:2007/07/11(水) 07:55:00
乱数生成ルーチンがバグってて出鱈目な値を返していても誰も気がつかない罠
426デフォルトの名無しさん:2007/07/12(木) 08:19:10
内部ベクトルでかいんだから、ミューテックスのがよくね?
427デフォルトの名無しさん:2007/07/12(木) 21:44:58
おいおい19937ビット+αだぜ?
428デフォルトの名無しさん:2007/07/12(木) 22:28:42
TLS使えばしまいだろ
429デフォルトの名無しさん:2007/07/12(木) 22:36:08
>>428>>422宛ね
430デフォルトの名無しさん:2007/07/12(木) 23:29:54
TLSとは何か。

Transport Layer Security
Thread Local Storage
True Love Story

いろいろあるんだな……
431デフォルトの名無しさん:2007/07/13(金) 02:11:06
いや、内部ステートをスレッド毎に持つというのは
確かに複数スレッドからの同時アクセスの点では良いのだが

例えばよく使われるsrand()はどうするのか。
スレッド毎にsrand()を呼ぶのか
あるいはsrand()の内部でスレッドを数え上げるのか
srand(time(NULL))の後にスレッドを作成したらどうなるのか
↑を最初に一度だけ呼んである過去のコードの扱いはどうなるのか
等々、面倒くさいことがありすぎるよ。
まともなコードで、srand()を呼ばずにrand()を使っているものがあるとは思えないし。

もちろん、「標準のrand()」を置き換えるのではなく
「自分で使う乱数生成器」をどうするか、という話なら
好きなようにどうぞ、というだけだけど。
432・∀・)っ-○◎●:2007/07/13(金) 03:11:46
そりゃ各スレッド毎にパラメータがあるわけだから、それぞれに初期化が必要になるだろうね。
種は現在時間+スレッドID+GUID/UUID+HDDシークタイムからとった自然乱数もどき+・・・・
見たいな感じでいろいろ組み合わせればよくね?

最近のMTの派生実装は種を配列で与えることができるんで、ユニークな乱数列になるように
なるべく多くのパラメータを与えるといい。
MTは種さえ被らせなきゃそこそこうまくバラけてくれる。
433デフォルトの名無しさん:2007/07/13(金) 08:20:03
CryptGenRandは?
434デフォルトの名無しさん:2007/07/13(金) 09:29:57
そういう話かよ?
435デフォルトの名無しさん:2007/07/13(金) 12:42:16
ワークメモリがスレッド毎に独立してると、たとえばモンテカルロみたいなのを複数スレッドで分割処理やりたいときに有用。

プロセスを分ければいいと言われると返す言葉がないがね。
436デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/16(月) 21:40:05
CryptGenRandomって自分じゃジェネレートしてないのに、なんでGenRandomなんだ?
GetRandomじゃないのか?
438デフォルトの名無しさん:2007/07/17(火) 19:01:44
その Gen は Generate ではなく、元、つまり集合の1要素だって
おじいちゃんがゆってた。
439デフォルトの名無しさん:2007/07/18(水) 00:24:49
「源」じゃないの?
すなわち「おじいちゃんの名前(ゲンじいちゃん)」
え?ちがう?
440デフォルトの名無しさん:2007/07/18(水) 00:29:36
ララ… わしゃ悔しいわい
441デフォルトの名無しさん:2007/07/18(水) 14:32:34
アゴなしの人か。
442デフォルトの名無しさん:2007/07/19(木) 22:22:22
DDAで円の軌跡を計算して、それを2重にして乱数作ったんだが、
擬似乱数として性能がいいのか調べる方法はある?1から10までの分布は
それらしくなっているんだけどな。
443・∀・)っ-○◎●:2007/07/19(木) 23:57:25
だんごやさんはSSE2用sfmtをboostに移植しようとしたがテンプレート地獄に涙目
444デフォルトの名無しさん:2007/07/20(金) 13:54:11
ビット毎の出現確率でも調べたら?
445デフォルトの名無しさん:2007/07/21(土) 07:35:38
>>442
どっかに基準とはる判定方法があったかも
446デフォルトの名無しさん:2007/07/21(土) 09:09:19
とりあえず、こんなのは見つかった。
DieHarder: A Random Number Test Suite
Robert G. Brown's General Tools Page
http://www.phy.duke.edu/~rgb/General/dieharder.php
447デフォルトの名無しさん:2007/07/21(土) 19:11:11
>>446
乱数検定の定番だな
448デフォルトの名無しさん:2007/08/15(水) 00:44:29
いろんな圧縮アルゴリズムにかけて
圧縮率を見るのってどうなの?
邪道?
449デフォルトの名無しさん:2007/08/16(木) 05:35:50
簡単なテストにはなるだろうけど、信頼性はかなり低いと思う。
zipで圧縮して50%になる乱数とかはそもそも論外だし。

はっきりした規則性があるのに圧縮率は低い、といった
データを作るのは簡単だから。
450デフォルトの名無しさん:2007/08/21(火) 10:53:40
圧縮してみるというのはNISTにあったけど、今はない(非推奨?取り下げ?)

擬似乱数のテストは、あとはWELLの設計者たちによるtestU01くらいか。
451デフォルトの名無しさん:2007/08/26(日) 21:01:21
無相関性擬似乱数アルゴリズム
http://www.trickpalace.net/column/random.htm
452デフォルトの名無しさん:2007/08/27(月) 12:58:39
↑一般には、初期化以外の部分でエントロピーを取り入れたら擬似乱数とは言わないと思う。
453デフォルトの名無しさん:2007/08/27(月) 13:56:24
>>452
再現性があるから疑似乱数だよ。
454デフォルトの名無しさん:2007/08/27(月) 17:41:51
>>466アンカーミス?
455デフォルトの名無しさん:2007/08/27(月) 18:06:37
>>454
( ´∀`)
456デフォルトの名無しさん:2007/08/27(月) 20:00:31
なんだこれ?
PCで見た時と携帯で見た時で番号がずれてるぞ。
457デフォルトの名無しさん:2007/08/27(月) 20:35:39
最近携帯鯖は不安定だからな
458デフォルトの名無しさん:2007/08/27(月) 23:13:25
>>452
初期化以外の部分ってどこのこと?
459デフォルトの名無しさん:2007/08/28(火) 06:44:04
Boostっていくつも擬似乱数クラスがあるけど、
その中に >>451 みたいな思想のヤツってないの?
460デフォルトの名無しさん:2007/08/28(火) 09:15:37
>>451
なんかよく分からんがテーブルの中からいくつかの要素を取り出して
XORして出力してるのかな?
テーブルの状態次第でビットの出現比に偏りがでそうな気がするんだが。
461452:2007/08/28(火) 10:08:02
>>458
失礼、用語に騙された。要するにエントロピー供給してないのね。
問題外じゃん。まず、状態空間の大きさとそれに対する最低周期
462デフォルトの名無しさん:2007/08/28(火) 11:08:48
101+103+107+109+113+127=660
101 * 103 * 107 * 109 * 113 * 127 = 1741209542339 ≒ 10^12 ≒ 2^36
463デフォルトの名無しさん:2007/08/28(火) 11:50:34
>>460
現状では出現比を特定できないほど巨大なテープルを用意できると
考えるのが妥当じゃないか?
気がするレベルではなく、偏りが計測できなければ、微小の偏りなど
有効誤差の範囲でしょう。
乱数であるかぎり特定の位置と周期でみれば偏りは常に存在する。
言語に付属するライブラリーが吐く擬似乱数が余りにも周期が短く
偏るためにいろいろ別の方法を試す奴が多いが、目的ごとにその方法論は
変わってくる。例えば組み込みの4KB以下のROMしかないマイコン用の
擬似乱数と考えれば偏りの無い性能より超コンパクトで一様に出るほうが
無難である。大量の計算を必要とする模擬計算などでは応答性の速度が
重要だったりする。あまりにも複雑な計算をして結果を生むより、適度に
妥協するのが擬似乱数の役割で、何が一番良いというのはありえないと思うが。
464デフォルトの名無しさん:2007/08/28(火) 17:21:17
>>463
巨大なテーブルにエントロピーを満たすのがえらい大変だと思う

>>462
かけ算だから細かく分けた方が周期が長くなる
MTと同程度のメモリとすると2番目の素数から20番目の素数までぐらい
Sum[Prime[i],{i,2, 20}]
637
最大周期は十進数の桁で
N[Log[10, Product[Prime[i],{i,2, 20}]], 5]
26.446
二進数の桁で、
N[Log[2, Product[Prime[i],{i,2, 20}]], 5]
87.850
最低周期は,エントロピープールから持って来ている以上、
全部おんなじ値という可能性が否定出来ない。よって1
465デフォルトの名無しさん:2007/08/28(火) 18:46:39
>>18
これイイな。
ちょっと乱数が欲しい時にちょうどいい。
MT使う程でもないけど線形合同法は気分的に嫌なんだよな。
下位ビットになるほど周期が短くなるのがな。
こういうの他にないのかな?
2^64 - 2^128位の周期で速くてメモリ使わないやつ。
466デフォルトの名無しさん:2007/08/28(火) 20:54:06
いろいろご意見ありがとです。

>>460
アルゴリズム的に意図的に用意したエントロピープールでも使わない限り、
変な偏りがでることはまずないです。


>>461
擬似乱数関数に第一に求められるのは周期でも速度でもフットプリントのサイズでもなく
その出力される乱数列上に相関性が表れないことだと考えて作りましたですよ。極端な話、
相関性がどれだけ現れようが容認できるのであれば乱数なんて使わずにカウンタでも
使ってればいいわけですから。

MTが周期の為にメモリを消費してるのに対してこの乱数アルゴリズムは品質の為に
メモリを消費してるんで、メモリ消費に対する周期効率は悪くて当然で、気にしとらんです。
467デフォルトの名無しさん:2007/08/28(火) 21:01:26
とりあえず論文の形にしてどこかに凸してみてくれ
468デフォルトの名無しさん:2007/08/28(火) 21:03:55
>>464
そこまではいらないです。この乱数アルゴリズムで生成された乱数列も、
一応、建前上は相関性のない乱数列なんで、例えば 2^32 なインスタンス
を二つ組み合わせて(4294967279x4294967291) 2^63 な周期を実現で
きるですよ。その分、乱数の生成速度にも影響はでちゃいますけど。


この手のものはいろんな批判に耐えることができてなんぼって面もあるんで
いろんな批判もウェルカムですけど、この乱数アルゴリズムは本当に優れた
ばらつきの乱数列を出力できるんで、是非とも皆様、他とは異なるこの上品質
の乱数列を一度ご賞味くだされ。
469デフォルトの名無しさん:2007/08/28(火) 21:04:59
いいこと思いついた!
これとMT組み合わせれば最強
470デフォルトの名無しさん:2007/08/28(火) 21:07:42
>>467
論文はちょっと・・・
でも、仕事で付き合いのある情報セキュリティ関係の数学者に
今度会う機会があったら見てもらおうかなとは思ってます。
471デフォルトの名無しさん:2007/08/28(火) 21:11:48
>>469
水と油というかうまく組み合わせるのは難しいんで、
なんかいいアイデアがあったら教えてください。
472デフォルトの名無しさん:2007/08/28(火) 22:33:52
乳化剤のイメージ
473デフォルトの名無しさん:2007/08/29(水) 00:24:41
>>451
本題と関係ないけど、コードの突っ込み。
環境(私が確認したのは2000と2003)によるけどCryptGenRandomしか使用しない場合は、
CryptAcquireContextのdwFlagsにCRYPT_VERIFYCONTEXTも指定したほうがいいよ。
474デフォルトの名無しさん:2007/08/29(水) 07:58:40
>>451
そもそも MT で奇数と偶数が交互だったり、プロットで特定の形に集中したり、
過去の結果から予測できることなんてあるの?

それがないなら MT でいいじゃんってことになると思うんだけど。
475デフォルトの名無しさん:2007/08/29(水) 08:03:11
>>468
いや、これって質の良いエントロピー源が存在することを前提として、
それを少し引き延ばしているだけなんだよ。
でも、質のよいエントロピーを得るのは結構難しくて、
多くのビットを捨てることによってなんとか質を上げているのが現状。

濃縮スープがあれば、薄めてスープが作れますという感じ。
476デフォルトの名無しさん:2007/08/29(水) 08:19:05
MTの質が悪いなんて聞いたことがないんだが。
MTの長周期を考えたら出力をプールしてxorすれば良さそうに思える。
477デフォルトの名無しさん:2007/08/29(水) 09:44:16
>>468
よう考えてつかぁさい。
ランダム情報源じゃぁ、それまでに出現した数とこれから出現する数との
間にゃぁ関係がないっちゅうなぁほんまじゃ。例えてゆぅたら、サイコロ
を二回振った時に、1回目に出る目と2回目に出る目の間にゃぁ関係がなぁ
のぉ。
ほぃじゃが、それと、ある特定の取り出した値の間に関係がないことたぁ
別なんよ。サイコロを二回振りゃぁ、例えてゆぅたら(1,1)が出るか
もしれんわけで、普通の人はこの二つん目の間にゃぁ関係があるとみなす
わけじゃ。

まあ、実際にプログラムを書いて実験してごらんさい。
ほいで結果をMTと比較してどこが違うんかを表なりグラフなりにしてみ
たらどうじゃろうか。
論文を書いてみるんも、参考文献を読まんにゃぁいけんっちゅう点じゃぁ、
よいゆぅて思いますけぇの。
478デフォルトの名無しさん:2007/08/29(水) 10:10:34
でもそんなの関係ねぇ
479デフォルトの名無しさん:2007/08/29(水) 13:01:58
malloc() は断片化するから危険って言って、 malloc() より遥かに質の悪い
アロケータを自作しちゃうのと同じ感じがする。
480デフォルトの名無しさん:2007/08/29(水) 14:56:40
>>479
動作するプラットホーム、CPU等に激しく依存するので何が正しいかは
動作させなければ判断は難しい。
481デフォルトの名無しさん:2007/08/29(水) 18:16:13
前のはなしになるが >>111 が MT の出力を圧縮できたと言っていたが、
おれはできなかった。>>111 は MT の使い方を間違えたんじゃないかな。

#include <stdio.h>
#include <stdlib.h>
#define main dummy
#include "mt19937ar.c"
#undef main
long buf[262144];

int main(void) {
int i; FILE*fp=fopen("test.dat","wb");
for (i=0;i<262144;i++) buf[i]=genrand_int32();
fwrite(buf,4,262144,fp);
fclose(fp);
system("zip test test.dat");
system("lha32 a test.lzh test.dat");
return 0;
}
482デフォルトの名無しさん:2007/08/29(水) 18:33:42
テストコードをdefineで回避するアイディアに脱帽。
483デフォルトの名無しさん:2007/08/29(水) 20:00:29
>動作するプラットホーム、CPU等に激しく依存するので何が正しいかは
>動作させなければ判断は難しい。

だが、動作させなくてもわかるほど確実に悪いものも、たくさん存在する。
484デフォルトの名無しさん:2007/08/29(水) 23:22:10
>>473
情報d。ちなみに今の trickrng.h のそのまわりの実装は MS の knowleg base から
パクってきたモノです。Crypt API まわりは下手に弄るとマシンによって動いたり動か
なかったりが出やすいんでよく調査した上で検討させて頂きますです。

>>474
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/faq.html
「暗号用の乱数として使いたい」のところ。

>>475
正に仰る通りで、おいしいスープができたんで是非ともご賞味ください。

>>477
3行でお願い。

>>479
そうでなければ喜ばしいんですけどね。
485デフォルトの名無しさん:2007/08/29(水) 23:27:32
もう熱雑音を種にMTを読み飛ばしながらつかってりゃいいよ
486デフォルトの名無しさん:2007/08/30(木) 00:25:18
>>465
古典だがLFSRは?
487デフォルトの名無しさん:2007/08/30(木) 02:12:36
>>451
「nビットの真性乱数からmビット(m>n)の真性乱数を演算で生成する」ってのを
しようとしてる? ...わけじゃないよね。それは原理的に無理。
# 昔圧縮で同じようなことを主張した会社があったっけか

「nビットの入力列からmビットの乱数っぽい数値を演算で生成する」のが
疑似乱数アルゴリズムなわけで、入力列に真性乱数を与えるとみなすなら、
入力エントロピーを引き伸ばして使ってるって意味ではみな同じでは。
線形合同法とMTが五十歩百歩なら、何を持ってきても五十歩百歩な気がする。

まあそれはさておき、入力エントロピーを薄め過ぎない方向に振るってのは、
発想としては面白いかもね。
ただ、既存の疑似乱数や暗号論的演算のコンボに実用性の観点で勝ち目があるものを
さくっと作れるのかというと、正直厳しい気がする。
488デフォルトの名無しさん:2007/08/30(木) 02:19:24
>>451
統計的な検査はよく分からんので置いておくとして、遅すぎ。
インデックス決めるためだけに呼び出す毎に整数除算8回もしてる。
試しにVC++(ver.7)で1億回呼び出すコード書いたら(releaseビルド)

0.578 (>>18のやつ)
1.000 (VC++のrandたぶん線形合同法)
1.672 (MT19937)
156.016 (>>451)

だった。(単位は秒、CPUはAthlonX2 3800+,WinXP SP2)
489デフォルトの名無しさん:2007/08/30(木) 03:15:22
さっぱりメリットが見えてこない
490488:2007/08/30(木) 03:51:05
すまん間違えた。
やりなおし

0.516 (>>18のやつ)
1.078 (VC++のrandたぶん線形合同法)
1.766 (MT19937)
17.015 (>>451)
491デフォルトの名無しさん:2007/08/30(木) 03:53:42
>>484
> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/faq.html
> 「暗号用の乱数として使いたい」のところ。

MT に対する優位性が暗号論的な安全性にしかないってこと?
その用途ならそもそも >>451 の種にできるようなエントロピーを
直接ぶっこむべきなんじゃないの?

何か >>451 を使うのが最適(MTでもOSの乱数でもダメ)っていう
現実的な例が欲しいかな。
492デフォルトの名無しさん:2007/08/30(木) 04:09:13
>>491
同感。得意な領域でもいいから、優位性があるところをデータで示してほしい
493デフォルトの名無しさん:2007/08/30(木) 04:10:39
なんか突っ込みどころ満載だな。
>>451
assert(0 != master_list[master_list_size -1]);
これ意味あるか?
1/2^32の確率で正しいテーブルがエラーになっちまうよ。
494デフォルトの名無しさん:2007/08/30(木) 04:17:37
495デフォルトの名無しさん:2007/08/30(木) 07:43:19
496デフォルトの名無しさん:2007/08/30(木) 09:08:14
>>484
> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/faq.html
> 「暗号用の乱数として使いたい」のところ。

予測できるのが嫌なら、そこに書いてあるとおりハッシュを噛ませれば良いんじゃないの?
そういう意味ではなくて?
497デフォルトの名無しさん:2007/08/30(木) 15:00:32
数学的な漸化式の形になってるのが嫌なんじゃないの?
498デフォルトの名無しさん:2007/08/30(木) 22:35:04
皆さん、いろいろご意見、ありがとです。

>>487
>「nビットの真性乱数からmビット(m>n)の真性乱数を演算で生成する」ってのを
>しようとしてる? ...わけじゃないよね。それは原理的に無理。

先述の数学者の先生にそのへんのことはいろいろ教えて頂いているおかげで知ってるですよ。
あと、真性乱数だと今度は逆に偏りが出やすくばらつきが悪いって欠点もありますし、
あくまで目指したのは良質な擬似乱数でするよ。

>入力エントロピーを引き伸ばして使ってるって意味ではみな同じでは。

このへん、私の考えが変なのかも知れませんが、MT は本質的にはカウンタであると
同時に本質的には 1 bit もエントロピーを持ち合わせていないとすら思ってます。
( 別にそれ自体は悪いことだとは思いませんけど。 )

実際 MT は多倍精度高速カウンタとして非常に強力ですよ、あのアルゴリズムは。

# 実際に多倍精度高速カウンタとして使うにはデコーダを用意する必要がありますけど。
# →で、そのデコーダがあれば 623 個の出力から MT のその後出力が全部わかるです。

>ただ、既存の疑似乱数や暗号論的演算のコンボに実用性の観点で勝ち目があるものを
>さくっと作れるのかというと、正直厳しい気がする。

出力される乱数列の優位性をできれば数値で測定・証明したいとは思ってます。
仰る通り、厳しいでしょうけど。
499デフォルトの名無しさん:2007/08/30(木) 22:37:32
>>488,>>490
重鈍なのはよく承知してます。恐らく一番ネックになってんのは剰余算やXORを
何度もやってることじゃなくてテーブル参照だと思います。最適化が綺麗に働けば
>>18 のヤツなんて全部レジスタに収まっちゃうんで、メモリ参照が必要な prime
spiral では絶対に敵いません。

prime spiral にあるのは「上質な乱数列」、ただそれだけです。

>>491
ある出力値とその 623 回後の出力値は絶対同じ値にはならないなんてものもあります。

>>493
例えば自前で csv を用意した際にデータが足りてないと致命的なんですが、
乱数であるが故にそれが非常に分かりにくいという問題があるんで過剰な
assert であることを承知の上でミスを検出できることを優先しました。

>>495
それはそれ、これはこれ。それは MT の仲間ではあるかも知れませんが、MT
そのものではなく、必然的に特性も MT とはいろいろ違うでしょうし、わけて
考える必要があると思います。実情はどうか知りませんが、情報セキュリティ
向けの対策を施されているということは一般的に考えて素の MT よりは処理が
重く、また乱数列としてのばらつきは悪くなっていることなどが予想されます。
500デフォルトの名無しさん:2007/08/30(木) 22:39:32
>>496
予想できること自体は私は問題視していないのですが、それは乱数列上に
問題を起こしかねない相関性を含んでいる証左なので。

>>497
それ自体はあまり気にしていないのですが、私は乱数列上に現れる相関性を
擬似乱数のバグのようなものだと捉えていて、その延長線で、多くの擬似乱数
アルゴリズムはそのバグを根本的に解決しようとするのではなく、バグの
再現率を下げて分かりにくくし誤魔化せればそれでよしとしているように
解釈してしまい、どうにも私にはそれが受け入れ難いのです。
501デフォルトの名無しさん:2007/08/30(木) 22:42:07
紛らわしい返し方しちゃったんでちょい補足。

>>499
>ある出力値とその 623 回後の出力値は絶対同じ値にはならないなんてものもあります。

これは、prime spiral じゃなくて MT の話です。
502デフォルトの名無しさん:2007/08/30(木) 22:48:12
>>500
MTは高次元(623次元)に均等分布することが証明されている。
このことは出力中の連続する値間の相関性が無視できる程度しかないということを意味する。

MTで問題があるというのは結構ですが、
貴方が作ろうとしているものは、それ以上の高次元に均等分布し、
数学的にちゃんと証明できるんですか。
503デフォルトの名無しさん:2007/08/30(木) 22:53:13
>>502
とりあえず

>ある出力値とその 623 回後の出力値は絶対同じ値にはならないなんてものもあります。

なんて問題はないです。
504デフォルトの名無しさん:2007/08/30(木) 22:57:41
>>502
均等分布の意味を私が取り違えてなければ prime spiral は 2^32 次元を超えてます。
505デフォルトの名無しさん:2007/08/30(木) 22:59:46
>>503
んで、周期はどうなるの?そっちのほうが問題だと思うが。
506デフォルトの名無しさん:2007/08/30(木) 23:00:31
>>504
根拠は?
507デフォルトの名無しさん:2007/08/30(木) 23:08:26
>>499
>ある出力値とその 623 回後の出力値は絶対同じ値にはならないなんてものもあります。

ないだろ。出鱈目書くなよ。
508デフォルトの名無しさん:2007/08/30(木) 23:32:48
>>504
あ、ごめん、やっぱり多分勘違いしてた。
MTで言ってる均等分布 623 次元空間を隙間なく且つ重ならずに埋め尽くすって意味ね。
だとしたら、prime spiral は 2^4800 パターンで 2^32 を超える次元に広がるんで隙間が現れます。

>>505
バグを直さずに周期もなにも・・・てな考えなんでごめんなさい。

>>507
ソースでも読んで。・・・と思ったけど、このへんはすでに改善されてる?
509デフォルトの名無しさん:2007/08/30(木) 23:44:13
orz


数年ぶりに mt のソース見て、思いっきり記憶違いしてることに気づいた。
俺の mt に対するコメントはいったん忘れてくれ。
検証し直したあとでまた mt に対する見解を述べます。大変、申し訳ない。
510デフォルトの名無しさん:2007/08/31(金) 00:39:56
2^32 次元って・・・
511デフォルトの名無しさん:2007/08/31(金) 07:41:59
このひとのボケっぷりからして、32次元の間違い以外の何物でもない。
そして、32次元均等分布もウソだろう。
512デフォルトの名無しさん:2007/08/31(金) 08:38:55
批判するなら最新のものもチェックしておけよな
513デフォルトの名無しさん:2007/08/31(金) 11:39:19
>>508
http://tricklib.com/cxx/dagger/trickrng.h
見たが、周期はどんなに良くても10^10ぐらいしかない。
初期ベクトル(エントロピープールという恥ずかしい名前が付いているようだが)の状態によっては、
悲惨な結果が待ってるな。

正直ゴミだと思う。MT叩く前に数学の世界を舐めるのを止めたほうがいい。
514デフォルトの名無しさん:2007/08/31(金) 13:16:37
>>513
追加。
ちなみにこれを、10000以下のすべての素数を使って実装しても、MTの周期に及ばない。
515デフォルトの名無しさん:2007/08/31(金) 17:36:34
XORとシフトを使うだけの超高速な擬似乱数生成アルゴリズム「Xorshift法」
http://lucille.atso-net.jp/blog/?p=9
516デフォルトの名無しさん:2007/08/31(金) 17:53:17
MTって最後に調律、とかやって遅くなってるのがいまいち。
M系列乱数の方が明らかに速いし、無理にMTを使うメリットが見えてこないんだけど。
517デフォルトの名無しさん:2007/08/31(金) 18:15:20
M系列で要求仕様を満たすならM系列で問題ないと思う。
生成速度だけが擬似乱数に求められる性能ではないし、要は適材適所だよ。
518デフォルトの名無しさん:2007/08/31(金) 18:22:16
>>516
というか、MTで速度が不満ってどういうこと?
全体の負荷の何パーセントをMTに持ってかれるの?
そういうところを無視して、速度を語っても意味がないぞ。数パーセントならマシン買いかえればいいんだし。
519デフォルトの名無しさん:2007/08/31(金) 18:24:28
>マシン買いかえればいいんだし
えー
520デフォルトの名無しさん:2007/08/31(金) 18:29:20
負荷の割合で語るのも意味無いぞ
521デフォルトの名無しさん:2007/08/31(金) 19:53:12
>>515
>>18で超既出
522デフォルトの名無しさん:2007/08/31(金) 19:53:49
>>516
そこらへんはSIMDでなんとかならんかなあ
523デフォルトの名無しさん:2007/08/31(金) 20:15:28
MT使ってソフトを配布してる人って、ちゃんとcopyrightも付けてるの?
俺が乱数ルーチンを作ったんだ!と主張したいんだろうけど、
たかが乱数ごときで、毎回書かなきゃならんのもなんだかな。
524デフォルトの名無しさん:2007/08/31(金) 20:26:52
コピーライト表記はしらんけど
修正BSDライセンスかなんかだったような
525デフォルトの名無しさん:2007/08/31(金) 20:27:23
>>523
アルゴリズムに著作権はないよ。サンプル実装のソースコードを、
そのまま使ってるなら、ソースコードには著作権が発生するけど。
526デフォルトの名無しさん:2007/08/31(金) 21:03:29
>>509
敵を知り、己を知れば…

そう、つまり最初にすべきは敵をちゃんと知っておくことなんだよね。
527デフォルトの名無しさん:2007/08/31(金) 21:10:24
>>508
> だとしたら、prime spiral は 2^4800 パターンで 2^32 を超える次元に広がるんで隙間が現れます。
周期 2^32 以下なのに、どうやって 2^32 次元に均等分布するのか謎だが…
528デフォルトの名無しさん:2007/08/31(金) 21:43:43
>>527
やあ、あんた少しはわかってる人だね。

>>516
M系列の方が明らかに周期が短いだろ

>>515
XORSHIFTはMTの周期や均等分布次元が必要でない時には、
実際に有力な選択肢だ。SFMTの速度比較でも速いと出てるしな。
529デフォルトの名無しさん:2007/08/31(金) 23:32:30
prime spiral のバラつきを見てみたが、かなり出てくる数値に偏りがあるな。

2^20 回試行して集計かけたところ、こんな感じ。

 1度しか現れない数値 30.9%
 出現回数が多い数値
  0 (2656回)
  8 (2637回)
  32759 (2452回)
  …

ちなみに MT だと、こうなる。

 1度しか現れない数値 99.9%
 出現回数が多い数値
  113個の数字が2回出現
  他はすべて1回出現

周期とかは見てないが、この時点で、すでにまともに解析する気なしってことで。
530デフォルトの名無しさん:2007/09/01(土) 00:17:17
>>526
というか、それ以前に敵ではないものを敵と勘違いしていると思われ。
531デフォルトの名無しさん:2007/09/01(土) 00:26:30
「敵」の姿を勝手に思い描き、己の姿も勝手に思い描いている。
そして、想像上の何者かと想像上の「己」が、
何かを戦っているつもりになっている。
これを妄想という。
532デフォルトの名無しさん:2007/09/01(土) 00:32:59
夢みのりがたく、敵あまたなりとも、我は勇みて行かん
533デフォルトの名無しさん:2007/09/01(土) 02:58:55
乱数検定のやりかたおせーて
534デフォルトの名無しさん:2007/09/01(土) 11:35:52
>>529
周期が短い場合はそのとおり、周期がとてつもなく長い場合は
偏りも乱数であり正しい性能である。
後者であれば、長い周期を測定できない評価ソフトの性能が悪いことになる。
535デフォルトの名無しさん:2007/09/01(土) 11:40:53
2^32までチェックしろと?
536デフォルトの名無しさん:2007/09/01(土) 12:12:39
>>534
周期以前にprime spiralは乱数になっていないのが問題。線形合同法にも劣る。ゴミだ。
2^20の試行で、0が2^11も出ている時点で正常な分布ではなく、2^32までチェックすることもなく明らかだ。
537デフォルトの名無しさん:2007/09/01(土) 12:23:13
>>534
> 周期が短い場合
prime spiral は内部状態が 32bit 符号なし整数1つだけなので、周期は最大 2^32 だよ。

初期ベクトルとしてもう少しマトモなものを選べば改善されるかもしれんが、いずれにしろ
やる気ないです。はい。
538デフォルトの名無しさん:2007/09/01(土) 13:09:20
>>529
どこか間違ってない?
別に擁護するわけじゃないけど、
俺も実験してみた結果、
100万回(2^20)出力して同じ値が出たのは
133 (>>18 xorshift)
146 (mt19937)
105 (>>451 prime spiral)
だったよ。
出力は全部unsigned int(32bit)。
ちなみに俺は>>488,490の人。

個人的には今のところ、周期が短すぎ、遅すぎというのを除けば
テーブルの初期化が適切であると言う前提ならそこそこの品質には思える。
でもテーブルに完全に依存しているから、
mtのような多次元均等分布は不可能なんじゃないかな?
テーブルを大きくすればするほど遅くなっていくし。(指数関数的に)
唯一のいいところはテーブルの状態が分かっていてもカウンタが
分からない限り過去の出力からは次が読めないところかな?
539デフォルトの名無しさん:2007/09/01(土) 13:15:39
なるほど、次を予測しにくい乱数アルゴリズムなわけか。
初期化の問題は(MTもそうだけど)
どこかからエントロピー持ってくるAPI(CryptGenRondom)やら
物理乱数生成チップやらでどうにかならないか?
540デフォルトの名無しさん:2007/09/01(土) 13:17:33
>>538
ソース出せ。こっちでも実験&分析してやるから。
prime spiralが如何にゴミであるか証明してやるよ。
541デフォルトの名無しさん:2007/09/01(土) 13:21:25
>>538
>唯一のいいところはテーブルの状態が分かっていてもカウンタが
>分からない限り過去の出力からは次が読めないところかな?

お前本人じゃねーの?
あれが「過去の出力からは次が読めない」って本気で思っているのか?
簡単にわかるぞ。あんなもの暗号に使ったら大変なことになる。

そんなボケかますのは本人以外ないと思うが、馬鹿がもう一人いるのかもしれんな。

予測不可能にするなら、MTにハッシュ(SHA)付ければ十分だ。
542デフォルトの名無しさん:2007/09/01(土) 13:28:21
無闇にageんなや
543529:2007/09/01(土) 13:29:55
>>538
#include <iostream>
#include "trickrng.h"

int
main()
{
tricklib::prime_spiral_entropy_pool g1;
unsigned const LOOP_MAX = 1 << 20;
for (unsigned i = 0; i < LOOP_MAX; ++i)
std::cout << g1.shuffle(i) << "\n";
}

できたテキストファイルを DB に取り込んで、グループ化かけて集計した。
544デフォルトの名無しさん:2007/09/01(土) 13:32:33
>>539
> なるほど、次を予測しにくい乱数アルゴリズムなわけか。
んなわけない。

内部状態が 32bit しかないので、周期は必然的に 2^32 以下。brute force でも
2^32 回の出力を見て記録していおいたら確実に次は予測可能なので、賢い
解析アルゴリズムを考えるまでもない。
545538:2007/09/01(土) 13:47:30
#define X ( 1 << 20 )
#define uint unsigned int

uint *buf = (uint *)malloc( X * sizeof(uint) );
if ( buf == NULL ) return;
tricklib::prime_spiral_dice dice( 100 );
for (uint i=X; i--; ) buf[ i ] = dice.roll();
sort( buf, X );//なんでもいい。シェルソート使った。
uint cnt[ 32 ], same = 0, p = buf[ X - 1 ];
for (uint i=X-1; i--; ) {
uint t = buf[ i ];
if ( t == p ) {
same++;
} else {
if ( same > 31 ) same = 31;//オーバーフロー対策
cnt[ same ]++;
same = 0;
}
p = t;
}
メモリに全部書き出してソートして前と同じならカウンタをインクリメント。
>>529
それ多分使い方違う。
テーブルが初期化されてない。
まあ、テーブル次第で悲惨な結果になるという見本ではある。

分かると思うけど作者じゃないよ。
アルゴリズム的に穴が多いから自分は使う気はないし。
546538:2007/09/01(土) 13:51:19
ごめんコピペじゃないんで一部ミスってる。
cnt[ 32 ]はstaticつけて0で初期化してね。
547デフォルトの名無しさん:2007/09/01(土) 14:02:26
それだとちゃんとカウントできんだろ。
最大の残したりできないから、上書きされるんじゃないか。
548538:2007/09/01(土) 14:10:32
>>547
上書き?はされないと思うけど。
最多31でカンストするようにはしたけど。
よく読んでおくれ。
同じのが3回以上出ることはなかったよ。
549デフォルトの名無しさん:2007/09/01(土) 14:19:22
>>548
いいから、出力結果をテキストファイルに出して、目で読んでみろ。
550538:2007/09/01(土) 14:27:59
>>549
あんたはなんで俺にからんでんの?
>>529,543のコードはどういうわけか
構造体のインスタンスを生成して実験してるから
テーブルが初期化されてなくてゴミが詰まった状態なんだっての。
テーブル次第で2^20の試行で、0が2^11も出たりすることもあるけど、
デフォルトのテーブルではそんなことはなかったって話だよ。
落ち着きなよ。
551デフォルトの名無しさん:2007/09/01(土) 14:31:39
>>550
だったら、この発言を取り下げろ。



唯一のいいところはテーブルの状態が分かっていてもカウンタが
分からない限り過去の出力からは次が読めないところかな?

552デフォルトの名無しさん:2007/09/01(土) 14:33:29
唯一のいいところがなくなったら、
いいところゼロのゴミであることに同意するんだな?
553538:2007/09/01(土) 14:35:47
>>551
はいはい取り消すよ。
別に俺が作ったわけじゃないし。
少なくとも一周すれば確実に次が読めるね。間違いない。
554538:2007/09/01(土) 14:39:26
>>552
ゴミだとは思わんけどな。
そういう考え方もあるのかってくらいのもんだよ。
ただ自分は使わないだけ。
555デフォルトの名無しさん:2007/09/01(土) 14:41:47
>>545
テーブルダンプしてみたら、確かに初期化されてなさげ。

00000000 00000000 00509146 00000008 00000000 00000000 005271a0 00000008
ffffe630 00007fff 00000000 00000000 00000001 00000000 078e530f 00000000
004004d1 00000000 00509270 00000008 00000001 00000000 00528600 00000008
ffffe628 00007fff 00000000 00000000 ffffe670 00007fff 00000000 00000000
00000001 00000000 078e530f 00000000 004004d1 00000000 00509369 00000008
00528000 00000008 00528200 00000008 00528400 00000008 00528600 00000008
00528000 00000008 00528200 00000008 00528400 00000008 00528600 00000008
00528800 00000008 00528600 00000008 00503a88 01000008 ffffe690 00007fff
00528000 00000008 00528600 00000008 ffffe5c0 00007fff 00000005 00000004
00528000 00000008 00000000 00000000 00000013 00000000 00000001 00000000
004003e0 00000000 004004d1 00000000 00528000 00000008 0050964a 00000008
00400368 00000000 ffffe6d8 00007fff 00528600 00000008 00528000 00000008
00500e40 00000000 00000001 00000000 00000000 00000000 0050bae9 00000008
00950880 00000008 005097bb 00000008 00000000 00000000 00528600 00000008
00000001 00000000 ffffe7d8 00007fff ffffe7c8 00007fff 0050747d 00000008
00000246 00000000 ffffffff 00000000 ffffe4e8 00007fff 00000000 00000000
00500b08 00000000 00500ea0 00000000 00c61910 00000008 00000001 00000000
00400764 00000000 00000206 00000000 00000000 00000000 00528000 00000008
00000001 00000000 0040088d 00000000 00000001 00000000
556538:2007/09/01(土) 14:44:19
>>555
あ、やっぱそうでしょ?
でもテーブルがこんなことになってしまう可能性もあるわけで
アルゴリズム的には問題ありなのは事実ですな。
統計的にも不安だし。
557529 (=555):2007/09/01(土) 14:44:34
なんか盛り上がってきたようだが…

そういや作者の人は MT のコード読み終わったの?
558デフォルトの名無しさん:2007/09/01(土) 14:45:15
>>554
でも唯一のいいところもないってことだね。
559デフォルトの名無しさん:2007/09/01(土) 14:47:52
>>558
唯一のいいところ=自己満足

で良いじゃないの? 俺言語とか俺DBとか俺ステートマシンとか、いろいろ HDD に
眠ってるぜ orz
560デフォルトの名無しさん:2007/09/01(土) 14:50:36
>>559
それは構わないけど、それは作った本人にとってであって、
第三者として利用するのに、自己満足も糞もないんだが。
561デフォルトの名無しさん:2007/09/01(土) 14:53:12
>>560
まぁねぇ。俺も使う気ないし。

ML で延々やられるよりは、2ch で自己満足に浸ってくれてた方が害が少ないので、
ここに閉じ込めておくのが吉かと。
562デフォルトの名無しさん:2007/09/01(土) 15:08:30
MTにもバージョンがあるからな。
最初のバージョンは結構素直だが、
今のは微妙に最適化されてたり
そのくせ古いバージョンの名残の変数名が使われてたりしてちょっと読みにくい。
563デフォルトの名無しさん:2007/09/01(土) 15:10:16
あとはコーディングスタイルがCらしすぎてちょっとアレ。
下手すると第三者の最適化版とかのほうが読みやすくなってたりする。
(ダンゴが同じようなことを上の方で言ってた気がする)
564デフォルトの名無しさん:2007/09/01(土) 15:35:57
>>543
prime_spiral_entropy_pool ではなく prime_spiral_dice を使うのが正しいんじゃ?
って550にもう書いてあるか。

つか、環境依存マクロで内部実装が何ヶ所か切り替わってしまうんで
同条件での比較ができてないんじゃないかという気もする。
そのせいで偏ったとか偏ってないとか話がすれ違ってるんでは。

次のコードでやってみた。環境はx86-linux、コンパイラはgcc-4.2.1。

#include <iomanip>
#include <iostream>
#include <ostream>
#include "trickrng.h"

int main(void)
{
 using namespace std;
 tricklib::prime_spiral_dice prng;
 const unsigned int n = 1 << 20;
 for (unsigned int i = 0; i < n; ++i) cout << prng.roll() << endl;
}

$ ./a.out | sort | uniq -c | awk '{print $1}' | sort | uniq -c
1048342 1
  117 2

てことで、漏れの手元ではダメな偏りは観測されず。
565564:2007/09/01(土) 16:13:00
書き忘れたんで補足。
最終結果の数値は、
「1回出現した値が1048342個、2回出現した値が117個。他はなし」って意味。

もちっとましな検定とその結果を見てみたいが、
漏れは乱数素人なんで方法がわからず。

まあでも、prime_spiral_diceクラスのインスタンスの「更新される内部状態」は
uint32_t型のメンバ変数"index"だけなんで、
疑似乱数の周期は>>544の指摘通り2^32以下。
あまりがんばる気にならんかも。

ソースには dynamic_prime_spiral_dice ってのもあるけど、誰か追った?
566538:2007/09/01(土) 16:21:28
>>565
コンストラクタがテーブルを乱数で書き換えてるだけだよ。
567538:2007/09/01(土) 16:27:04
そうそうカウンタが32bitしかないから
定期的に別の乱数でテーブルを書き換えた方がいいと思うんだ。
全部とは言わないけど一部だけでもね。
自身の出力を使って書き換えると意味がないから
別の系列の乱数でってことになるんだけど、
そこまでやるならやっぱMTとかをハッシュにかけたらいいじゃんて話なんだな。
568564:2007/09/01(土) 18:22:56
>>566
thx。インスタンスごとに別々のテーブルを持ってるだけで、
初期化後はテーブルを書き換えないって点では prime_spiral_dice と同じか。
疑似乱数アルゴリズムの評価って意味では見なくていいね。

>>567
単に乱数を得るって意味では、時々 secure_dice_type を振って混ぜればいいかと。
疑似乱数とは呼べなくなるんだろうけど、うまくすれば使えるようになるか?
もっとも、テーブル更新をしない間の出力の性質がよくないとダメだけど。

自身の出力または内部状態を使って書き換える方法で性質がよくなるなら、
そっちの方がいいんだが。
569デフォルトの名無しさん:2007/09/01(土) 18:31:00
>>568
> 単に乱数を得るって意味では、時々 secure_dice_type を振って混ぜればいいかと。
secure_dice_type の出力によってはテーブルが悲惨な状態になりかねんぞ。

統計的に不安定なアルゴリズムはいやん。
570538:2007/09/01(土) 19:20:21
ふと思ったんだけど、
互いに疎な周期を持った二つの異なる系列の乱数をXORしたら
理論的な出力はどうなるんだろう?
周期が2^32と2^31とかなら間違いなく2^63になるはずだけど(互いに疎だから)、
予言可能性とかはどうなるのか?
571デフォルトの名無しさん:2007/09/01(土) 19:28:29
>>570
> 周期が2^32と2^31
それ、互いに疎じゃない。GCD=2^31。
572538:2007/09/01(土) 19:32:08
いや、そのくらいの周期でって意味。
2^19937-1はメルセンヌ数でしょ?
普通は2^19937の周期でって書くじゃん。
実際には1少なくても。
573デフォルトの名無しさん:2007/09/01(土) 19:43:58
>>533
>>446
PDFだけど↓みたいなものも見つけた
ttp://www.fdk.co.jp/cyber-j/pdf/HM-RAJ103.pdf
574・∀・)っ-<コ:彡-:2007/09/01(土) 19:44:45
>>563
可読性に関しては言及してないよ。C++&マルチスレッドで使うには不便すぎますよねー、て感じ。
定数定義周りはマクロじゃなくてテンプレートでなんとかなりそうだが。boostみたいに。
575デフォルトの名無しさん:2007/09/01(土) 19:48:04
>>572
既知の周期 m, n の二つの系列の乱数があった場合、m + n だけ XOR された
乱数を見れば、元の乱数列が計算可能だと思う。

周期 m の乱数 x(0), x(1), ..., x(m - 1)
周期 n の乱数 y(0), y(1), ..., y(n - 1)
XORされた乱数 z(0), z(1), ..., z(mn - 1)

これで最初の m+n 個の乱数が取得できれば

x(i mod m) ^ y(i mod n) = zi

という方程式が m + n 個作れる。右辺は全部既知なので、未知数 m + n 個に対して
方程式 m + n 個あるので、あとは計算すりゃ出るでしょ。

周期が未知の場合には、もう一捻りいるかも。
576538:2007/09/01(土) 20:43:52
>>575
なるほどなるほど。
確かにそうだ。m+nまで分かれば残りが完全に予言できるね。
でもこれってx,yを特定するのは無理だよね。
一つだけでも分かれば後は芋づる式だけど。
577デフォルトの名無しさん:2007/09/01(土) 20:58:42
>>570
周期3と周期5だったら
12312312312312312312..
12345123451234512345...
-----------------------------
246564356635468246...

XORじゃなくて足してるだけだけど普通に3*5=15の周期になるよね。
2^32の線形合同法を4つ組み合わせたら、普通に2^128周期になるんじゃないかな?
乱数性はともかく。
578・∀・)っ-<コ:彡-:2007/09/01(土) 21:28:57
残念ながら最大公約数にしかなりません。
579538:2007/09/01(土) 21:42:52
今ちょっと考えてたけど系列の違う乱数がいくつあっても
全ての系列の周期が分かってれば大きい方から2つの周期を加算した
ところまでみれば残りが全部予言できそう。
違うかな?

>>578
出力の周期のことだよ。
580・∀・)っ-<コ:彡-:2007/09/01(土) 21:46:18
十干と十二支の組み合わせは120じゃなくて最大公約数の60にしかならないでしょ
581・∀・)っ-<コ:彡-:2007/09/01(土) 21:47:31
2^32付近の素数調べてみた?

その付近の周期の乱数も。
582デフォルトの名無しさん:2007/09/01(土) 21:51:59
>>576
> でもこれってx,yを特定するのは無理だよね。
特定する意味はないな。

x, y すべてに対してある数 n を xor しても、出力がまったく変わらんから、
出力を満たす x, y の組み合わせは無数にある。
583538:2007/09/01(土) 21:54:56
あれ?互いに疎って両方素数って意味じゃなかったんだっけ?
ごめん両方素数の意味ね。
数学の知識が高1くらいで止まってるから訳分からん事言ってるな。
すまん。
584538:2007/09/01(土) 21:56:29
>>582
>特定する意味はないな。
分かってるよ。確認したかっただけ。
585・∀・)っ-<コ:彡-:2007/09/01(土) 21:57:26
互いに素ってのは

最大公約数=1
最小公倍数=積

586・∀・)っ-<コ:彡-:2007/09/01(土) 21:57:55
疎ですた
587538:2007/09/01(土) 22:57:52
>>579の続き
ちょっと違うかな。
周期3,5,7の乱数があったら3と5を組み合わせて
周期15と7の乱数があることになるから
この場合は15+7=22まで見ればいいんだな。
3,5,7,11なら(3*11)+(5*7)=68かな?
もっと短く出来るのかな?
588デフォルトの名無しさん:2007/09/01(土) 23:11:56
>>587
3+5+7 = 15 で良いと思うが。
589538:2007/09/01(土) 23:59:55
今実験したところ周期を全部足せば良いみたいだ。
周期3,5,7の場合はそのまま3+5+7=15
16番目の数字は2 3 4 7 8 10 11 14 15番目を全部XORすると出てくる。

以下ソース
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define uint unsigned int
int main( int argc, char *argv[] )
{
srand( (uint)time(NULL) );
uint a[ 3 ], b[ 5 ], c[ 7 ], x[ 3 * 5 * 7 ];
for (uint i=0; i<3; i++) a[ i ] = (uint)rand();
for (uint i=0; i<5; i++) b[ i ] = (uint)rand();
for (uint i=0; i<7; i++) c[ i ] = (uint)rand();
for (uint i=0; i<3*5*7; i++) {
x[ i ] = a[ i % 3 ] ^ b[ i % 5 ] ^ c[ i % 7 ];
}
uint x15 = x[ 1 ] ^ x[ 2 ] ^ x[ 3 ] ^ x[ 6 ] ^ x[ 7 ] ^ x[ 9 ] ^
x[ 10 ] ^ x[ 13 ] ^ x[ 14 ];
printf("%d\n%d\n", x[ 15 ], x15);
return 0;
}
590538:2007/09/02(日) 00:01:57
>>588
まったくその通りです。
591538:2007/09/02(日) 00:40:47
しつこいけど、もうひとつ。
15個まで分かれば次の数字が分かるということで
逆に直前の15個が分かっていれば残りも全部同じ式でいける。
というか一般項に出来る。
なんか面白かったんでもう一度ソース。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define uint unsigned int
int main( int argc, char *argv[] )
{
srand( (uint)time(NULL) );
uint a[ 3 ], b[ 5 ], c[ 7 ], x[ 3 * 5 * 7 ];
for (uint i=0; i<3; i++) a[ i ] = (uint)rand();
for (uint i=0; i<5; i++) b[ i ] = (uint)rand();
for (uint i=0; i<7; i++) c[ i ] = (uint)rand();
for (uint i=0; i<3*5*7; i++) {
x[ i ] = a[ i % 3 ] ^ b[ i % 5 ] ^ c[ i % 7 ];
}
for (uint i=15; i<3*5*7; i++) {
uint z = x[ i - 1 ] ^ x[ i - 2 ] ^ x[ i - 5 ] ^
x[ i - 6 ] ^ x[ i - 8 ] ^ x[ i - 9 ] ^
x[ i - 12 ] ^ x[ i - 13 ] ^ x[ i - 14 ];
printf("%3d: %10d %10d\n", i, x[ i ], z);
}
return 0;
}
592538:2007/09/02(日) 08:50:11
いろいろ考えていてさらに気付いてしまったのだけど、
一般項の一番最後はi-14なんで実は15個でなくて14個目の時点で分かるようだ。
周期を足して分かるのは最悪でもここまで見ればという上限に過ぎないらしい。
どうやら単純なものではないみたいだ。
さらに系列が二つの場合、数列Xは周期をa,b(ともに素数)として
Xa+b = X0 ^ Xa ^ Xbと出来る(たぶん)
系列が三つ以上ある場合はそれほど簡単でもないらしい。
さらにこの漸化式表現だと合成後の周期までは分からないようだ。
3 * 5と2 * 3 * 5は同じ漸化式に出来るけど周期は違う。
ともにXi = Xi-3 ^ Xi-5 ^ Xi-8と書ける。

もう少し調査を続けるかも。
593デフォルトの名無しさん:2007/09/02(日) 13:50:40
MT に関する見解を出せるのはもっと後になりそう。
いろいろ考えてるとMTの理屈そのものになんか辻褄の合わないところが見えてきたです。
多分、論文をちゃんと見ればその矛盾に対する但し書きがあるんじゃないかと思うです。

# 例えば MT の周期じゃ 623次元で均等分布するのは不可能。厳密な意味で 623次元
# で均等分布する為には周期が n^623 の倍数である必要があるけど MT の周期は
# そうではない。
594デフォルトの名無しさん:2007/09/02(日) 13:51:36
次元の話に関しては prime spiral は"素数の合計値(150)"次元のデータを
"素数の積算値(6685349671)"次元のデータに変換するアルゴリズムと言え、
また prime spiral で 2^32 周期を実現する為には 2^32を超える 次元の
データ(への変換)が必要となるですよ。余った分は単に捨ててます。

で、150次元から6685349671次元への座標変換を行うんでその結果は当然スカスカ
で MT で言う均等分布にはなりません(先述の隙間が現れるってはこの意味)。
595デフォルトの名無しさん:2007/09/02(日) 13:53:11
初期化の結果によっては悲惨の出力になるって点については...

・あり得ないような確率の元データが発生したのを受け忠実に
 そのあり得ない様を出力しているだけ。
・そもそも悲惨と感じるのは人間の主観の問題であって数学的
 には特別な意味を持たない。

...という見解ではあるんですが、そもそもの prime spiral の作成目的から
すると放置するべき問題じゃないと考えますので対策しておきます。

# 次回更新時に 2^63 周期版も追加しておきます。2^32 周期版よりもさらに
# 倍ちょっと重いようなしろものですが。
596デフォルトの名無しさん:2007/09/02(日) 13:54:46
内部状態を変化させればって話がありますが、prime spiral の思想的にそれは
タブーでここを崩すと prime spiral の存在理由も崩れちゃいます。

あと、"得意分野があれば"って話がありましたけど、よくよく考えてみたら
乱数列に対して簡単にランダムアクセスができるって利点があるですね。
597デフォルトの名無しさん:2007/09/02(日) 14:21:49
>>593

http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF
>メルセンヌ・ツイスタでは、状態空間が長方形から1ビットだけ突き出した(あるいは31ビット欠けた)形をしている点に特徴がある

これのことかな。他にもまだ数字の辻褄があってないとこがあるんで論文読みます。
598デフォルトの名無しさん:2007/09/02(日) 14:35:53
N次元空間に均等に分布ってのは >>564 みたいなテストをN個の連続サンプルによる
N次元ベクトルについて行って特に偏りが無いってことだよね?

全部の組み合わせを埋め尽くすって意味じゃないでしょ。そういう意味なら
均等に分布なんて言葉使わないはずだし。
599デフォルトの名無しさん:2007/09/02(日) 16:16:43
>>580
最小公倍数
600・∀・)っ-<コ:彡-:2007/09/02(日) 19:56:27
斉藤氏見てるここ?
601デフォルトの名無しさん:2007/09/02(日) 21:29:08
>>446のDieHarderの使い方を調べてみた。

まず、調査対象の乱数をファイルに落とす。フォーマットはこんな感じ。

 type: u
 count: 10 ←要素数
 numbit: 32
 1663584611 ←1乱数につき1行。符号なし10進数。要素数分だけ列挙
 1565230341
  674637926
 ...

で、dieharderに食わせる。

 dieharder -a -g 65 -f ファイル名

`-a'は「一通りテストしろ」、`-g 65'は「ファイルから読め」の意。
65って数字はdieharderのバージョンによって違ったりするっぽいので、
`dieharder -g -1'で "file_input" がどの番号かを確認。

必要な要素数はテストによって異なるけど、1,000,000個ぐらいでいいらしい。
602601:2007/09/02(日) 21:39:10
>>601のつづき。

検定内容は ttp://www.phy.duke.edu/~rgb/General/dieharder.php の後半の
"DieHarder Test Suite" あたりに列挙されている。ただし名前だけ。

で、識者に質問。この検定って質はどうなの?
各々、名の通った乱数検定を実装したものなのか、単にオレオレ検定なのかとか。
入力が少なくていいんで、周期は検定対象外ってことぐらいはわかるけど。
603デフォルトの名無しさん:2007/09/02(日) 22:32:15
>>593
辻褄が合わないのは貴方の頭の中のでしょう。
変な書き込みを匿名でするくらいなら、数学を学びなおした方がいいですよ。
prime spiralでは、MTの足元にも及びません。
604・∀・)っ-<コ:彡-:2007/09/02(日) 22:34:15
メルセンヌ素数の意味わかってないんじゃね。
松本教授の論文いっぺん読んでこないとね
605デフォルトの名無しさん:2007/09/02(日) 23:43:01
というか、MTの仕組みを理解していなかったのに、
自己流の変なものを作ってしまい、あとからMTの問題が勘違いだと発覚。

でも、MTに問題がないと困るから今になって必死に粗探ししているようなものだろ。
人間性から腐っているよコイツは。

MTがいったいどれだけの年月と人によって検証されてきたものか理解していないんだろな。
自分が上に立てるとでも思っているのかこの馬鹿は。
606デフォルトの名無しさん:2007/09/03(月) 08:10:51
MTのソースだけ読んで、均等分布とか理解するのは無理。かといってMTの論文は
数学以前に英語で挫折するであろう。
でも、斎藤さんのページにこんなんあったよ。これで勉強すれば?

ttp://home.hiroshima-u.ac.jp/d073872/random/5bitmt.html
607デフォルトの名無しさん:2007/09/03(月) 21:45:19
>>605
誰でも一度は通る道だから、そこまで言わんでも。まぁ、ふつーは中二ぐらいで済ませるが。
608デフォルトの名無しさん:2007/09/03(月) 21:56:59
M系列の乱数って出力が規則的になってしまう区間が出来てしまうのだけど
これを回避する上手い方法ってないもんでしょうかね?
ハッシュとか以外で。
609デフォルトの名無しさん:2007/09/04(火) 02:14:48
>>608
よくはわからんが、MTみたいに調律すればいいんかな。
でも適当じゃダメか。
610デフォルトの名無しさん:2007/09/04(火) 07:57:05
>>601
単なるオレオレ検定ではない。

ところで、入力が少ないんで周期は検定対象外だろうって書いてるけど
どんだけ入力したら、周期が検定できると思っている?
611デフォルトの名無しさん:2007/09/04(火) 13:32:24
>>607
自分がすごいもの作れると有頂天になるだけか、
既存のものに疑問を持って批判するだけか、どちらかならそれほど問題はない。
それなら理解もできる。

だが、自分が上に立ちたいとか、自分の存在意義のために、
間違っていないものを間違っているとしてでっちあげるのは最低だろ。

こいつが警官だったら、自分の評価を上げるために、
自分の勘違いで逮捕してしまっても、罪をでっちあげて犯罪者に仕立て上げかねん。

社員であれば、他人の足を引っ張ったり、失敗をかぶせたり、
浅はかな考えで周囲を振り回したりする、有害な存在であろう。
612デフォルトの名無しさん:2007/09/04(火) 19:24:43
あんたそりゃいいすぎだべ
613デフォルトの名無しさん:2007/09/04(火) 21:58:29
>>611
実社会で迷惑をかける代わりに、ここで落書きして気が済むなら、それで良いじゃん。
日本の治安向上に役立ってるなw >2ch

で、MT は理解できたのかな?
614デフォルトの名無しさん:2007/09/04(火) 22:18:05
MT に関する見解ですがまず以下の点を訂正させてください。

>多倍精度高速カウンタ
→多倍精度高速カウンタとしては高速ではない。

># →で、そのデコーダがあれば 623 個の出力から MT のその後出力が全部わかるです。
→内部状態が全部 0 になっている場合を除き 623 個じゃ足りない。もう少し必要。

>ある出力値とその 623 回後の出力値は絶対同じ値にはならないなんてものもあります。
→そんなことはない。

以上の点については私の記憶違いを端に発してる勘違いです。
大変、お騒がせしました。
615デフォルトの名無しさん:2007/09/04(火) 22:18:50
今回、MT に関して勉強させて頂き、MT の出力が昔ながらの擬似乱数列に
求められる条件を理想的な形で体現しているというのはよく理解できましたです。
が、それでもというか、だからこそやっぱり MT は少なくとも私が特別な前提
条件がない状態で求める擬似乱数とは違うですよ。

別のところでも述べましたけど prime spiral 自体はそのロジックが瓦解
しちゃっても全然構わないと考えてます。prime spiral に問題がないことが
より確実な形で検証されればそれに越したことはありませんが、私が大事
だと考えているのは prime spiral のエントロピーを引き延ばすアルゴリズム
なんかじゃなくて、エントロピーを大切にし、問題を引き起こしかねない
相関性を乱数列上から根本的に排除しようという思想です。
616デフォルトの名無しさん:2007/09/04(火) 22:19:32
(みんなが騒いでるのってその部分についてだっけ…)
617デフォルトの名無しさん:2007/09/04(火) 22:19:46
>>499
>恐らく一番ネックになってんのは剰余算やXORを
>何度もやってることじゃなくてテーブル参照だと思います。

あと、これ、間違ってました。ご指摘通り剰余算が一番ネックになってます。
パフォーマンス改善の為に試しにMODテーブルを用意して剰余算を行わず
に処理したらどうなるか試してみましたけども、パフォーマンス上特に有効な
差異は認められませんでした。


概ね、prime spiral に関するご意見等も一通り出尽くしたみたいですので
ここらで一度、ご意見を下さった方々、速度や出力される乱数列について
検証してくださった方々に改めてお礼申し上げますです。
618デフォルトの名無しさん:2007/09/04(火) 22:21:26
>>615
アイディア倒れになると良くないから、
ちゃんと数学の勉強をしてみたほうがいいと思うよ。
619デフォルトの名無しさん:2007/09/04(火) 23:17:19
>>615
君は相関性もまともにわかってないから今のままだと無理だよ。
MT以上に相関性無くすのは大変だから。
prime spiralは相関性ありまくりだし。
620デフォルトの名無しさん:2007/09/04(火) 23:19:22
>>616
ちょっと読み返してみた。
>>593 のことなら、確かに言葉が悪かった。
暗号なんかを含め、この手の分野の厳密さはよく知ってるから、
評価されてる論文の絶大さも理解はしてるですよ。


>>618
いいものを自分の手で作ることができればいいなぁとは思ってますけど、
この分野を専攻していこうというまでの気概はありませんのでw

# 数学系の厳密さはいい加減な自分には肌が合わんとですよ。
621デフォルトの名無しさん:2007/09/04(火) 23:27:51
>>619
今回、勉強させてもらったおかげでよく理解しましたけど、MT は本質的には相関性の塊ですよ。
ただ、MTの場合その周期やパターンの関係上、相関性が(少)ないように見えるってだけで。

prime spiral の相関性も知ってます。というか、ぶっちゃけ意図的に問題が
発生し得ないような方向に相関性をコントロールしてます。
622デフォルトの名無しさん:2007/09/04(火) 23:28:52
>>620
真面目に数学もやる気がないなら、
変なライブラリは自己満足にして、公開するのはやめてくれんか?
正直、これ以上君のような馬鹿が増えると迷惑なんだが。

>暗号なんかを含め、この手の分野の厳密さはよく知ってるから、

理解していないから、MTに文句たれて、ゴミのprime spiralを公開してるんだろ。
まあ、やめろって言ってもやるだろうけど、そのうち、もっと恥をかくことになるよ。
623デフォルトの名無しさん:2007/09/04(火) 23:32:04
まーよくわからんが、言葉は定義してから使いましょ
624デフォルトの名無しさん:2007/09/04(火) 23:32:07
>>621
>今回、勉強させてもらったおかげでよく理解しましたけど、

まだ理解できていないと思われ。
理解しているなら試しにより周期の長いMTを作ってみてごらん。

>MT は本質的には相関性の塊ですよ。
>ただ、MTの場合その周期やパターンの関係上、相関性が(少)ないように見えるってだけで。

違うよ。疑似乱数だから相関性があるのは当然だが、
prime spiralのような劣悪な相関性はないのは君は理解していないだろ。

>というか、ぶっちゃけ意図的に問題が
>発生し得ないような方向に相関性をコントロールしてます。

できていませんが?どこでコントロールした気になってるの?
625デフォルトの名無しさん:2007/09/04(火) 23:34:27
煽りには付き合う気は毛頭ないんで、ごめんあそばせ。
626デフォルトの名無しさん:2007/09/04(火) 23:36:05
>>625
どうぞ。失せてくれ。
煽りでも何でもなく、欠陥の指摘をされても理解できないようだから。
627デフォルトの名無しさん:2007/09/04(火) 23:36:37
>621
相関性って何?周期って何?
というのはトモカクだ、

本質的って何のこと?
パターンって何のこと?
問題って何のこと?
方向って何のこと?

を書いてくれないと議論できない。今更だけど。
628デフォルトの名無しさん:2007/09/04(火) 23:38:13
まあ、しばらくしても続けているようだったら、
prime spiralが相関性ありまくりで最悪であることを証明して投稿してやるよ。
数学の世界を舐めてもらったら困るので。
629デフォルトの名無しさん:2007/09/04(火) 23:39:07
>>624
MTFSは長いのやら短いのやら選択できたっけ。
630デフォルトの名無しさん:2007/09/04(火) 23:40:25
>>628
>prime spiralが相関性ありまくりで最悪であることを証明して投稿してやるよ。

ごめん、これはぜひ、お願い。
検証にご協力頂けるのは助かります。
631デフォルトの名無しさん:2007/09/04(火) 23:42:47
>>629
できる
632デフォルトの名無しさん:2007/09/04(火) 23:44:01
>>630
> 検証にご協力頂けるのは助かります。
ふつーは専門家に検証を頼むなら、論文ぐらい書くもんだぞ…

言葉も明確に定義せず、参照論文や related work も示さずに、あまつさえ
タダで評価してもらおうなんて、虫がよすぎるとは思わんか?
633デフォルトの名無しさん:2007/09/04(火) 23:44:26
>>630
>>625のように真面目に答える気がないなら、今はやだね。
君が自信もって発表して、恥をかくタイミングまでまってやるよ。

ちゃんと説明する気があるなら、協力してやらないこともないけど。
634デフォルトの名無しさん:2007/09/04(火) 23:44:38
>>628
それは俺も楽しみにしてるわ
635デフォルトの名無しさん:2007/09/04(火) 23:46:16
>>633
もう発表してるんだから、早く早く!
636デフォルトの名無しさん:2007/09/04(火) 23:47:28
>>632
返す言葉もございません。m(_ _)m
637デフォルトの名無しさん:2007/09/04(火) 23:48:09
>630
うーん、本来は逆だよな。

prime spiralがある切り口で最高であることを作者自身が証明する
のが筋じゃない? それなしで検証とか言われてもなー。悪魔の証明
を思い出した。

折角作ったのに叩いて悪いんだけどさ。

プログラマは数学から距離を置く方がいい仕事ができると
ポールグレアムも言ってるだろ。。。
638デフォルトの名無しさん:2007/09/04(火) 23:49:16
車輪の再発明どころか、車輪の再失敗をしてどうするのだろうね・・・。
斬新なアイデアでもなんでもないのに。
639デフォルトの名無しさん:2007/09/04(火) 23:49:39
>>637
重ね重ね、返す言葉もございません。
640デフォルトの名無しさん:2007/09/04(火) 23:50:01
>>637
例外に Knuth っつー巨人がいるから、みんな目を奪われちゃうんだよな。
641デフォルトの名無しさん:2007/09/04(火) 23:50:28
(ところでこのスレ今何人いるんだろうね。4人位かな)
642デフォルトの名無しさん:2007/09/04(火) 23:50:56
2!
643デフォルトの名無しさん:2007/09/04(火) 23:51:10
>>640
ノイマンも
644デフォルトの名無しさん:2007/09/04(火) 23:52:18
>>638
アイデアとして別に真新しいものじゃないのはわかってる。
ただ自分の欲しいモノを求めてそれが見つからなかったから自作してみただけ。
同じような思想のモノでいろいろとちゃんと検証済みのヤツがあったらそれを採用したい。
645デフォルトの名無しさん:2007/09/04(火) 23:53:10
>>643
俺はノイマン型コンピュータは、エッカートとモックリーの業績だと思ってるので。
646デフォルトの名無しさん:2007/09/04(火) 23:54:16
ノイマンはどっちかつうと論理屋
プログラマではないな
647デフォルトの名無しさん:2007/09/04(火) 23:54:28
>>644
いままでの乱数の何が問題で、何を今回のは解決したのか、
定義不明な言葉を使わずに説明してよ。
648デフォルトの名無しさん:2007/09/04(火) 23:54:49
>>644
いや、君が作ったものは君の欲しいものになってないから。
欲しいものと、実装できたものを、一度表にでもまとめてごらん。
649デフォルトの名無しさん:2007/09/04(火) 23:56:19
/dev/randomから得た種と適当な一方向ハッシュ関数でも使っとけ。
650デフォルトの名無しさん:2007/09/04(火) 23:57:19
(あー俺も大学時代に教授に>>647と同じようなこと言われたっけ…
懐かしいなあ)
651デフォルトの名無しさん:2007/09/04(火) 23:59:16
>>647
>>451 で説明してる以上にはそれをちゃんとそれを説明できてないってのがまず問題だよね。
ちょっと今回はもう興がだいぶ削がれちゃってるからやらないけど、
また、こっち方面でうずうずしてきたら今度はちゃんと問題定義からやり直すように致します。
652デフォルトの名無しさん:2007/09/05(水) 00:00:41
>>649>>541で既出か。
653デフォルトの名無しさん:2007/09/05(水) 00:04:12
>>628
しばらく続いたことだし、>>628 は悪魔の証明がんばってねw
654デフォルトの名無しさん:2007/09/05(水) 00:07:07
>>651

>>451って何も説明していないし、根本的に間違ってるよ。
MT以上に相関性をなくすために、
いったいどれだけのプールが必要かわかってないみたいだし。
655デフォルトの名無しさん:2007/09/05(水) 00:08:59
>>653
相関性あることに気が付いていない無いの?本人か?
出力値から簡単に逆算できるぞ、あれ。
656デフォルトの名無しさん:2007/09/05(水) 00:11:21
>>655
算出式書いて。
657デフォルトの名無しさん:2007/09/05(水) 00:12:52
>>656
数列とアルゴリズム書いたら逆算してやる。
アルゴリズムが同じだったら、数列だけでいいぞ。
658デフォルトの名無しさん:2007/09/05(水) 00:13:10
>>637>>653
>>628は相関性がある事の一点を指摘すればいいわけだから別に悪魔の証明じゃないんだよ
http://ja.wikipedia.org/wiki/%E6%82%AA%E9%AD%94%E3%81%AE%E8%A8%BC%E6%98%8E
既に気づいてるそうだし
659デフォルトの名無しさん:2007/09/05(水) 00:15:27
>>657
公開されてるんだから、自分で全部用意できるだろ?
660デフォルトの名無しさん:2007/09/05(水) 00:16:07
>>658
>>637は、>>630の依頼の仕方が酷いといっているだけです。
661デフォルトの名無しさん:2007/09/05(水) 00:16:13
>>658
相関性がちゃんと定義されてないから無駄。
662デフォルトの名無しさん:2007/09/05(水) 00:19:20
>>661
628の定義・基準では相関性があるって事なんだろ
だから628がそういう定義も込みで証明を出してくるのを待つだけ
663デフォルトの名無しさん:2007/09/05(水) 00:23:28
>>658 >>662
664デフォルトの名無しさん:2007/09/05(水) 00:24:19
>>659
逆算プログラムとアルゴリズムは教えるつもりはない。
そうすると、少し修正しただけのものを作ってくるだろうから。

ただ、逆算できることを証明してほしいならその手伝いをしてあげてもいい。

こっちが初期値を聞かずに、出力値から当てれば、その証明になるだろ。
665デフォルトの名無しさん:2007/09/05(水) 00:24:48
>>663
正解
666デフォルトの名無しさん:2007/09/05(水) 00:25:35
664カコイイ
667デフォルトの名無しさん:2007/09/05(水) 00:30:19
>>664
はい、じゃ、アルゴリズムは prime spiral で
出力は↓

8A1579636B2EC55D39F006AA24CC75860E20D48
B428C34B0E38C6C538F3EE4A1239889FCDBD459
8D80B40EF3EF1F0A5DB8B581D8F85497945E5FD
1C2BDC83C6FE1FB759C5EFB0CD83BCDA8E48BC0
172226BE2615F284C7C66DC6E9D07D4DF1203D2
0D27C584C79B99C79BAB7AAEA7C6AB6782DAB5F
FD586FCA9308922BAEC087A04F732D86E49880D
CC70BBCF3BACBCD4E212FA7FE5D7DAB81EE56D5
4EC7A0522645C6912D5E33F1A80C701B481DF86
2F3C587F2D49E2D10CE7D591A5E9209F72444FB
1FD8899C3F48749640924127B735FF79525C78E
226887745DAF96F3099E776724ACE45DED7B9B6
FA841B3433A0E6EDFB130F5D6D8F0270D4B80A3
028C1040FB5D2D2AD7D8916B93D2B1457E1D13A
C3B886870D16030DD2BA2973ECFE05A7425CAE5
668デフォルトの名無しさん:2007/09/05(水) 00:31:43
>>667
それで足りるのか? まぁ、いくつ必要なのか 664 が書いてないから
分からんが。
669デフォルトの名無しさん:2007/09/05(水) 00:35:43
>>664
初期値がわかるのか。次に出る値がわかるのかとおもったよ。
まぁ、次に出る値を当てることはMTでも可能か。
670デフォルトの名無しさん:2007/09/05(水) 00:37:00
>>667
32ビットずつちゃんと区切れよ。検証してもらう態度じゃないぞそれは。
それからデータはお前のサイトにおけ。本人以外に協力してやる気もないから。
数列の量はMTに文句言ったのだから、620個用意しとけ。
671デフォルトの名無しさん:2007/09/05(水) 00:37:50
ヘラクレスの栄光III
672デフォルトの名無しさん:2007/09/05(水) 00:37:56
盛り上がってまいりました!
673デフォルトの名無しさん:2007/09/05(水) 00:38:36
wktk
674デフォルトの名無しさん:2007/09/05(水) 00:38:46
>>670
ワラタw
675デフォルトの名無しさん:2007/09/05(水) 00:38:48
tktk
676デフォルトの名無しさん:2007/09/05(水) 00:39:20
さて
どっちが先にくたばるかな
677デフォルトの名無しさん:2007/09/05(水) 00:39:48
>>670
ところで合ってたかどうかの証明はどうやるんだ?
678デフォルトの名無しさん:2007/09/05(水) 00:41:05
>>677
こっちが逆算した数列見れば本人にはわかるだろ。
679デフォルトの名無しさん:2007/09/05(水) 00:41:05
>>677
その初期値で、同じ出力が得られることを確認すれば良いんじゃね?
680デフォルトの名無しさん:2007/09/05(水) 00:41:19
>>677
初期値使って自分で乱数生成してみりゃ自明
どんだけ生成すればでてくるのかは知らんが..
681・∀・)っ-<コ:彡-:2007/09/05(水) 00:41:45
今牟板で一番熱いスレ
682デフォルトの名無しさん:2007/09/05(水) 00:42:07
それは>>667が…
あ、そうか。だから本人のサイトにアップするなりして
確証を持たせる必要があるからか。


2chトリップを利用するのはどうだ?
トリ解析器を使われると一方向性がちょっと怪しいけど
683デフォルトの名無しさん:2007/09/05(水) 00:43:28
わっふるわっふる
684デフォルトの名無しさん:2007/09/05(水) 00:45:05
>>681
ほんとだよw
もう夏休みも終ったというのに…
あ、大学生はまだしばらく休みだな。

さて、社会人の俺はもう寝る。
明日どうなっているのか楽しみだ……
685デフォルトの名無しさん:2007/09/05(水) 00:46:16
>>679
それじゃ証明にならんぞ。ある一定部分が同じでもその後の出力は異なるパターンがいくつもあるし。
ん? てか、だとしたらそうならない量のデータが必要なわけだが、620で本当に足りるんか?
686デフォルトの名無しさん:2007/09/05(水) 00:49:25
まさか初期値を求めるのに何万年掛かるとかそういうのは無いよね
687・∀・)っ-<コ:彡-:2007/09/05(水) 01:21:52
>>682
確かに乱数生成ルーチンにもなるよな。あんまり効率よくないが。
688デフォルトの名無しさん:2007/09/05(水) 01:35:58
ダンゴさんが来るとスレが引き締まるな。
689688@・∀・)っ-<コ:彡-:2007/09/05(水) 01:38:40
まあ全部俺の自演だけどな
690デフォルトの名無しさん:2007/09/05(水) 02:00:25
数学なんてわからんっすう
691デフォルトの名無しさん:2007/09/05(水) 02:46:30
自演厨乙 いか臭せーw
692デフォルトの名無しさん:2007/09/05(水) 03:41:29
結果まだかな
693デフォルトの名無しさん:2007/09/05(水) 04:15:22
>>670
あと何万年ー?
694デフォルトの名無しさん:2007/09/05(水) 07:06:54
仮性人バロス
695デフォルトの名無しさん:2007/09/05(水) 08:01:33
乾杯モンテカルロ〜♪
好きよ貴方が楽園〜〜
696デフォルトの名無しさん:2007/09/05(水) 08:11:51
あーおもしれぇスレ
697デフォルトの名無しさん:2007/09/05(水) 14:42:28
>>670
釣り宣言マダー?
698デフォルトの名無しさん:2007/09/05(水) 15:02:21
>>697
釣りじゃないよ。
なんつーか、本人以外は逆算できることに気が付いている奴が多いんじゃないの?
前の方のレス読んだら、ヒントが書き込まれているし。
初期値がわかると言っても、正確には同じ結果を出す、初期値のうちの一つの解になるんだけどね。
次に出る値も当然わかるよ。

あと、620個も本当はいらないんだけどね。
未知数の数がいくつか考えれば、必要なデータ数が遙かに少ないことは、わかるやつにはわかると思う。

ちなみに、XOR演算であるという点以外は、中学レベルの数学で十分求まるよ。
699デフォルトの名無しさん:2007/09/05(水) 15:22:17
知ったかぶり乙
700デフォルトの名無しさん:2007/09/05(水) 15:25:15
解ってる奴が前の方は見ないからなw
701デフォルトの名無しさん:2007/09/05(水) 15:42:51
元のアルゴリズム見てないけど、
そこまで簡単ということはただの連立方程式
さらに恐らく1ビットずつ独立して計算できるとかかな。
702デフォルトの名無しさん:2007/09/05(水) 16:07:51
>>701
当たり
703デフォルトの名無しさん:2007/09/05(水) 21:56:36
>>698
>釣りじゃないよ。

じゃぁ、素で言ってるの? どっちにしろ、お前にはガッカリだ。

エントロピープールがほとんどゼロで初期化されちゃったとかの極端なケースを除けば
その後の出力予測云々の話以前に、そもそもその程度の数じゃ、その後の出力が
1パターンに収束しないし、1パターンに収束するには何桁も出力が足りない。
いくらなんでも prime spiral の特性を理解してなさすぎ。
704デフォルトの名無しさん:2007/09/05(水) 21:58:02
線形合同法よりマシならなんでもいいや
705デフォルトの名無しさん:2007/09/05(水) 22:05:57
そう思う奴はこんなところに来なくていいや
706デフォルトの名無しさん:2007/09/05(水) 23:46:35
>>703
収束するよ。

嘘だと思うなら、収束しない例を一例でいいから書いてごらん。
707デフォルトの名無しさん:2007/09/05(水) 23:51:06
あと何時間かかるか教えてくれ
708デフォルトの名無しさん:2007/09/05(水) 23:51:57
>>703
というかさ、お前本人だろ。
本人以外に、prime spiralに興味を持ち、特性を理解して、
かつ問題も見えず、収束していないことに気が付かない奴っているの?

知能が道化師レベルの癖に、問題点も見えずに特性を理解した気になって
過大評価できる奴なんて、あり得ないだろ。
709デフォルトの名無しさん:2007/09/05(水) 23:52:40
もうこの流れ秋田
そろそろ隔離スレ作るか?
710デフォルトの名無しさん:2007/09/05(水) 23:53:21
>>707
指示したものをサイトにアップしたらやるよ。
711デフォルトの名無しさん:2007/09/06(木) 00:02:11
>>710
お前にはいい加減うんざりだし、他の人にも迷惑だから
お前がそれで引き下がるならお前がいうデータをサイトにアップしても構わんが、
その前にお前が俺じゃないことを、証明する方法を考えてくれんか?
お前のことだから、予測ができなかったことを今度は俺の自作自演だって騒ぐんだろ?

構ってちゃんみたいだから、こいつが俺じゃないことを証明する方法を明示しない限り
俺だけでも、このスレから去ることにするわ。
712デフォルトの名無しさん:2007/09/06(木) 00:10:54
>>711
ん、少なくとも俺は迷惑じゃないぞ。
wktkして二人のやり取りを見てる。
713デフォルトの名無しさん:2007/09/06(木) 00:11:01
>>711
> 他の人にも迷惑だから
迷惑な人の数 <<<<<<< ニヤニヤしながら展開を見守ってる人の数
714デフォルトの名無しさん:2007/09/06(木) 00:12:11
prime spiral自体よりも、サクーシャのファビョりっぷりのほうが予測不可能だなw
715デフォルトの名無しさん:2007/09/06(木) 00:17:14
>>711
どうせ他に話題が無くて過疎ってたのだからお気になさらずに^^
716デフォルトの名無しさん:2007/09/06(木) 00:42:09
>>711
>お前にはいい加減うんざりだし、他の人にも迷惑だから

根拠もなく勘違いでMTを批判したり、その一方で危険なライブラリを
配布しようとしている方が遙かに世の中に対して迷惑であろう。

>その前にお前が俺じゃないことを、証明する方法を考えてくれんか?

なんでそんなものが必要なんだ?
別に俺の存在とは関係なくやればいいだろう。
お前が自分のサイトで、prime spiral が安全か検証してくれる人を募集する形で、
出力例をアップすればいいだろ。

そもそも乱数のアルゴリズムを発表するときは、
ライブラリを使用する人のためにチェック用に正規の出力例をつけるものだ。

それにプラスして、エントロピープールを秘密にしてある出力例を追加して、
乱数の予測や逆算の評価をお願いするというだけでいいだろう。

そうすれば、俺はお前に協力してやると言っているのだ。
口は悪いし、本気で馬鹿にしているが、いいか、これはお前のための善意だ。
下手をするとお前の一生の恥になり、信用を失う。
717・∀・)っ━━━┓:2007/09/06(木) 00:45:06
うるしあバールのようなもので叩くぞ
718デフォルトの名無しさん:2007/09/06(木) 02:25:46
ソースを読んだところで理論的な説明をひとつ。

>>451のは結局のところGFSR(Generalized Feedback Shift Register)そのもの。
これはM系列の一種でつまるところ普通の線形漸化式。
indexというカウンタがindex_maskという変数でxorされてるので
具体的には分かりかねるが大きな多項式になっとる。
index_mask == list_a[ 0 ]のようなのでここを変えると多項式が変わる。
で、本人は勘違いしているようなのだけど、
適当に多項式を作っても原始多項式でないと周期は保証されないし、
場合によっては出現する組み合わせもかなり少なくなる可能性アリ。
つまり素数を全部掛けたものがそのまま周期になるわけじゃないので注意。
X^31 + X^29 + X^11 + 1とか適当に作っても実際に判定してみないとダメ。
上の方に書いてあったけど選んでxorしたものも最終的には漸化式の形になるよ。
ただ>>451のちょっと面白いところはランダムに多項式を作ってるってところかな。
でも動的に作ってるから何が出来るか分からんのが問題だが。
たまたま長周期になるかもしれんし全然ダメなのも出来るかもしれん。
多項式をどうするかは重要な問題だからな。

結局>>451のはGFSRというシンプルなものを難しく複雑に作っただけ。
index_mask==list_a[0]以外の配列を0と1で初期化すれば普通にW=1bitの線形漸化式になるよ。
MTはTGFSR(Twisted GFSR)といってこのWが32bitになってさらに
縦と横のベクトルが組み合わさって長周期を実現しててえらいこっちゃ。
さらに調律が加わって(これはいらない気もするが)分布も良くなってる。
>>451のは32bitの配列を使ってるけど結局GFSRのままなんで
縦と横が独立してるから周期も分布もいまいち。

勉強しましょう。
719デフォルトの名無しさん:2007/09/06(木) 08:35:44
>>718
MTの調律は、分布じゃなくて
ビット毎の相関を減らすためのくふうで、
そこまでイラネって場合は調律しなくてもいい。
(高速化するにも邪魔だし)
720デフォルトの名無しさん:2007/09/06(木) 09:39:07
>>718
> 多項式をどうするかは重要な問題だからな。
もっともな意見なんだが、作者は >595 とか本気で返事してくるからなぁ
721デフォルトの名無しさん:2007/09/06(木) 09:55:19
nynywktk
722デフォルトの名無しさん:2007/09/06(木) 10:17:39
>>718
貴方の言うことはもっともだけど、彼の場合は多項式以前の問題。
その説明だって理解できているのか正直怪しい。

>>703
>そもそもその程度の数じゃ、その後の出力が
>1パターンに収束しないし、1パターンに収束するには何桁も出力が足りない。

理解できたなら、こういう間違った発言に気がつくと思うけど…

>いくらなんでも prime spiral の特性を理解してなさすぎ。

作者が一番特性を理解していないんだから困ったもんだ。
723デフォルトの名無しさん:2007/09/06(木) 12:30:09
で、初期値は?
724デフォルトの名無しさん:2007/09/06(木) 13:00:25
>>723
>>710

というか、お前も、prime spiral の特性を理解していないのな。それとも本人?
725デフォルトの名無しさん:2007/09/06(木) 13:06:03
尻馬に乗ってるだけで実際は何も言えて無いところがポイントだな。
726デフォルトの名無しさん:2007/09/06(木) 13:24:12
それでも作者よりまともそうに見えるのがなんとも言えない。
727デフォルトの名無しさん:2007/09/06(木) 16:19:13
ワロスw
728デフォルトの名無しさん:2007/09/06(木) 17:24:47
てかてか
729デフォルトの名無しさん:2007/09/06(木) 18:01:13
>>724
ついに誰かれ構わず本人認定しだしたな。
末期症状。

ちなみに俺はもちろん作者なんかではない、ただの野次馬。
730デフォルトの名無しさん:2007/09/06(木) 18:12:40
>>729
別に認定はしてないよ。
自分がするべきことをしないでそういうことを言いそうなやつだから、疑いがあったから聞いただけ。
気を悪くしたのならスマン。

それから、prime spiral の特性を理解していれば、
出力値から、同じ乱数列を出す初期値のうちの一つの解を求めることができるのはわかる。

731デフォルトの名無しさん:2007/09/06(木) 18:19:48
とりあえず一つの判定基準を。

sageてない奴は同一人物。
732デフォルトの名無しさん:2007/09/06(木) 18:26:21
>作者
聞くは一時の恥、聞かぬは一生の恥。
733デフォルトの名無しさん:2007/09/06(木) 22:20:03
そうだよな。ほんと。
734デフォルトの名無しさん:2007/09/06(木) 22:55:33
>>731
あーあ。
735デフォルトの名無しさん:2007/09/06(木) 23:23:20
C++関係から来た外部の者だけど、ここ数日間楽しかったよ!
736デフォルトの名無しさん:2007/09/07(金) 01:03:07
否、まだ終わっていない
737デフォルトの名無しさん:2007/09/07(金) 01:07:55
でも作者はもうダンマリする事にしてそうな気がするよ
738デフォルトの名無しさん:2007/09/07(金) 01:10:05
>>737
ML アーカイブは残り続けるけどな。Webも魚拓とっとく?
739デフォルトの名無しさん:2007/09/07(金) 02:26:39
作者が黙っているなら、MLの方でやってやろうかな。
740デフォルトの名無しさん:2007/09/07(金) 02:43:09
もういいじゃん。
どこまで追い込むつもりだよ。
741デフォルトの名無しさん:2007/09/07(金) 02:48:19
だね
742デフォルトの名無しさん:2007/09/07(金) 03:58:09
>>740
危険なライブラリを気がつかずに配布していることは作者も望まないだろ。
間違いを証明するのは、作者も望んでいるはず。


468 名前:デフォルトの名無しさん 投稿日:2007/08/28(火) 21:03:55
この手のものはいろんな批判に耐えることができてなんぼって面もあるんで
いろんな批判もウェルカムですけど、この乱数アルゴリズムは本当に優れた
ばらつきの乱数列を出力できるんで、是非とも皆様、他とは異なるこの上品質
の乱数列を一度ご賞味くだされ。


499 名前:デフォルトの名無しさん 投稿日:2007/08/30(木) 22:37:32
prime spiral にあるのは「上質な乱数列」、ただそれだけです。


630 名前:デフォルトの名無しさん 投稿日:2007/09/04(火) 23:40:25
>>628
>prime spiralが相関性ありまくりで最悪であることを証明して投稿してやるよ。

ごめん、これはぜひ、お願い。
検証にご協力頂けるのは助かります。
743デフォルトの名無しさん:2007/09/07(金) 04:25:58
その頃は大したダメ出しはされないだろうという自信があったんでないの
744デフォルトの名無しさん:2007/09/07(金) 05:27:21
証明無しにここまで粘着されるとは思ってなかったんだろう。
745デフォルトの名無しさん:2007/09/07(金) 05:29:51
>>742
危険ってここではどういう意味?
暗号用途に使えないのはMTも一緒だと思ったので。
746デフォルトの名無しさん:2007/09/07(金) 07:44:44
作者は暗号用途にも使えるつもりでいる。
MTより「良い」乱数だと宣伝しているけど、実際は周期などの点で低品質。

信じて使うとろくなことにならないってことでしょ。
747デフォルトの名無しさん:2007/09/07(金) 08:09:27
あれか、
十分に引き付けてから撃つ。
748デフォルトの名無しさん:2007/09/07(金) 08:27:27
>>740
ここの内容が訂正されるまでじゃない?
ttp://www.trickpalace.net/column/random.htm

> この prime spiral のように問題を引き起こしかねない相関性を全て排除した擬似乱数アルゴリズムを無相関性擬似乱数アルゴリズム
> 「MTも所詮、線形合同法と五十歩百歩」
749デフォルトの名無しさん:2007/09/07(金) 10:50:30
>>744
ほとんど証明に近い指摘はたくさんあるし、解き方のヒントも提示してきた。
これでわからないレベルなら、初期値の例を示して証明するしかないだろ。
そのためには、作者の協力も必要。だって作者にわからせるんだから。

>>745
作者自体が理解していないアルゴリズムで、品質に根拠がないばかりか、
まともな検証すらされていなく、問題点に気がつかず「良い」と宣伝され、
使った人間が騙されて被害を被るプログラムだから。

俺は作者のやっていることはテロに等しいと思っている。

本当に世のために公開しようとしているのなら、
無責任な宣伝をする前に、やるべきことがたくさんあるはず。
750デフォルトの名無しさん:2007/09/07(金) 18:36:48
いや、でも、こんなの信じて使うバカが本当にいるのか?
本当によい疑似乱数が必要なら自分でチェックするもんだろ。
751デフォルトの名無しさん:2007/09/07(金) 18:38:14
>>749-750
つ スルー力
752デフォルトの名無しさん:2007/09/07(金) 19:00:14
スルーしたい奴はさっさと去ね
753デフォルトの名無しさん:2007/09/07(金) 19:02:22
>749
作者に間違いを認めさせることと、
間違っていることを世間に証明することのどちらがゴールなのか判然と
しないな。落ち着け。
754デフォルトの名無しさん:2007/09/07(金) 19:03:39
>>752
俺は元ネタのあれについては一貫してスルーしてるよ。
「君もスルーしてくれると良いな」と思ってるんだよ。
755デフォルトの名無しさん:2007/09/07(金) 19:05:24
俺は今のところスルーしないほうが面白いと思ってるから。すまんね。
756デフォルトの名無しさん:2007/09/07(金) 19:22:54
>>754
君、腐れ女子以下w
7571:2007/09/07(金) 19:37:27
このスレ立てた>>1ですが、
なんだか随分と盛り上がっているようで。
しかし、もっとましな方向で盛り上がってくれと思う。
MTFSとか、もっと美味しそうな話題がいくらでもあると思うんだがよ?
758デフォルトの名無しさん:2007/09/07(金) 19:40:56
違った。FSMTか。
まあいいや
759デフォルトの名無しさん:2007/09/07(金) 19:47:06
>>753
両方
760デフォルトの名無しさん:2007/09/07(金) 19:49:09
>>757
気持はわかるが、MTに問題があるからもっといいものをといって出されたものが糞だったんだが。
で、その糞をサイトやMLでばら撒いている馬鹿がいるわけだが。
761デフォルトの名無しさん:2007/09/08(土) 00:06:00
>760

そこまで口汚く罵れる精神構造がよくわからん。
別に作者に使うことを強要されているわけでもないし、
スルーしておけばよいだけのこと。
新しいものを出そうとする人間をたたいてばかりいると、
そのうち国が滅びるよ。
(あなたがMTの作者ならともかく)
762デフォルトの名無しさん:2007/09/08(土) 00:35:04
技術的議論なら歓迎なんだがナー
763デフォルトの名無しさん:2007/09/08(土) 00:51:43
>>761
>新しいものを出そうとする人間をたたいてばかりいると、

そういう方向性なら歓迎するところだが、
MTに対する勘違いした間違った批判を行い、【同時に】、劣悪なものをそれよりも優れていると
主張する態度に問題を感じている。
彼はそこそこ手広い活動をしているのだから、わかっていない他人を間違った方向に進ませてしまう恐れもある。

それに、本当に新しく、良いものを作り出す人間は、彼のように思いあがってはいないよ。
ほとんどの優秀な人は、彼と全く正反対で、非常に謙虚で、慎重で、真摯だ。

俺は今回のことで彼が深く反省し、学問や技術に対する態度を改めることを祈っているよ。
764デフォルトの名無しさん:2007/09/08(土) 00:54:13
>>761
> 新しいものを出そうとする人間
w

>> 「MTも所詮、線形合同法と五十歩百歩」
765デフォルトの名無しさん:2007/09/08(土) 01:08:49
766デフォルトの名無しさん:2007/09/08(土) 01:11:38
>>765
作者の批判の方が酷いってことだろ。
線形合同法と五十歩百歩なのは、prime spiralの方であり、MTはレベルが全く違う。
767デフォルトの名無しさん:2007/09/08(土) 01:51:44
>>762
技術的な議論から逃げているのだから仕方ない
768デフォルトの名無しさん:2007/09/08(土) 05:43:28
>>767
ここでつついても技術的な議論にならないのなら
ここでつつく意味もない
769デフォルトの名無しさん:2007/09/08(土) 05:45:03
770デフォルトの名無しさん:2007/09/08(土) 09:52:21
prime spiralを軽く眺めてみたが
%を除去すればゲームに使うのにはよさそうだ
771デフォルトの名無しさん:2007/09/08(土) 10:20:56
>>770
xorshift で良いじゃん。
772デフォルトの名無しさん:2007/09/08(土) 12:03:29
xorshiftのseedって自分で変更するとやばいよねえ
どうすればいいの
773デフォルトの名無しさん:2007/09/08(土) 12:09:28
別にやばくない。
全部0じゃなきゃいいんだ。
適当に線形合同法でも使え。
774デフォルトの名無しさん:2007/09/08(土) 12:34:02
レスありがとう
そうなんだ
1と0の数が同じほうがいいとかあるのかな
775デフォルトの名無しさん:2007/09/08(土) 12:42:51
それはある。
出来るだけ均等な方が望ましい。
でも自分が調べた限り偏ってても大した問題は出てない。
776デフォルトの名無しさん:2007/09/08(土) 15:26:44
>>770
mtでいいじゃん
777デフォルトの名無しさん:2007/09/08(土) 16:51:29
ゲームなら高速で多次元分布が良くて再現可能なのがいいな
xorshiftで十分?
778デフォルトの名無しさん:2007/09/08(土) 16:58:13
ゲームによる。
トランプ、麻雀なんかは階乗のオーダーなので
それなりにでかい周期がいる。
あと分布もよくないと。
mtなんかうってつけだな。
アクションとかは応答性が求められるからxorshiftみたいなのが良い。
レジスタに全部おさまるくらい小さくて速いやつ。
779デフォルトの名無しさん:2007/09/08(土) 19:47:25
>>778
乱数の使用頻度はゲームのジャンルより、実はエフェクト出す数に
よらんか? 特にパーティクルを適当に飛び散らす系。
780デフォルトの名無しさん:2007/09/08(土) 23:40:57
>>770
ダメだって。分布も周期も最悪に近い。
無駄に遅い分一般的な線形合同法よりも酷い。
781デフォルトの名無しさん:2007/09/09(日) 00:07:19
>>767
中の人、結局、これを多少なりともマトモな体裁で書き直す気無いのかねぇ。
ttp://www.trickpalace.net/column/random.htm

まっとうに議論するためには、言葉の定義と評価基準を示して、これこれこういう点で
優れてると証明つきで出すのが最低ラインなんだが。
782デフォルトの名無しさん:2007/09/09(日) 11:20:07
土俵にあがるつもりが無いんでしょ
783デフォルトの名無しさん:2007/09/09(日) 13:03:27
土俵にあがったら負けかなと思ってる
784デフォルトの名無しさん:2007/09/09(日) 13:06:32
>>783
作者は多分そう思ってる。
しかし、作者を批判してる人の方が、
作者が土俵に上がるまで手の内は見せないというか
わざと隙があるように振舞ってて
かなりえげつない。
785デフォルトの名無しさん:2007/09/09(日) 13:09:41
>>783
思ってる時点ですでに負けじゃんw
786・∀・)っ━━━┓:2007/09/09(日) 18:34:44
「新しい」擬似乱数の質については学会にでも論文出してくればいいと思いますです。
ここの連中は評価しようがないから。


牟板発祥のソフトって何があったっけ?
DGCAくらいしか知らん。
787デフォルトの名無しさん:2007/09/09(日) 18:37:42
査読に耐えられる質の論文を書けない疑惑
788デフォルトの名無しさん:2007/09/09(日) 20:05:20
ダンゴさんの開発したソフトがあるじゃないか
789・∀・)っ━━━┓:2007/09/09(日) 20:15:05
設計当時はVIPに居座ってた。
790デフォルトの名無しさん:2007/09/09(日) 20:48:56
>>784
確かにそうだな。
見る人間が見れば、詰んでいることはわかる筈だし。
791デフォルトの名無しさん:2007/09/10(月) 06:38:43
>>784
同意。さっさと証明出してほしい。
792デフォルトの名無しさん:2007/09/10(月) 10:05:02
>>791
でもその前に作者がやることをやらないとね。
793デフォルトの名無しさん:2007/09/10(月) 23:53:23
>>792
作者の介在なし証明は書けるだろ。それだけで十分社会の役に立つから
よろ。
794デフォルトの名無しさん:2007/09/11(火) 00:12:48
知ってるが
  作者の態度が
    気に食わない
795デフォルトの名無しさん:2007/09/11(火) 00:40:08
場当たり的な対処で穴を隠されるのが気に入らないとかそういう理由だろうけど
少しでもよくなる可能性があるなら情報を出した方が良いんじゃないか
796デフォルトの名無しさん:2007/09/11(火) 00:44:13
>>795
そんなことをしてもMTには勝てないから全くの無駄。
本人にとっては修行になるだろうが、第三者的には練習ライブラリなどいらないので。
利用者のことをまともに考えていない作者はプログラマ失格だと思う。
797デフォルトの名無しさん:2007/09/11(火) 03:59:30
言い訳入りました
798デフォルトの名無しさん:2007/09/11(火) 04:36:24
>>793
証明に対して、相関性の言葉の定義が違う、とか悪あがきをしだすに 3 ガノッサ。
799デフォルトの名無しさん:2007/09/11(火) 08:32:18
結局やりたくないのでしょ?
できないとは思わんけど、もう作者もいないだろうし黙ったら。
800デフォルトの名無しさん:2007/09/11(火) 08:47:04
俺はこの調子で続こうが構わんけどね
ってかやめさせたければ何か他のネタ提供すれば
ただ過疎らせたいのなら別だけど
801デフォルトの名無しさん:2007/09/11(火) 09:23:17
今の流れはもうスレの趣旨から反してきてるでしょ。
これで続けるなら落としたほうがまだ良いよ。
802デフォルトの名無しさん:2007/09/11(火) 10:23:46
っていうか、沈静化したいのは作者だけだろ。
どうどうとサイトで酷いプログラム公開していて、黙れというのは筋が通らない。

ここで続けるのが反対なら、俺が別のスレ立てる。だが、その前に、作者には選択肢をやろう。

・prime spiralの説明で使われている言葉の定義と評価基準を明確に示してサイトを修正する。
・検証のためのデータを提供する。
・MTに対する中傷を取り下げ、サイトとMLに謝罪文を載せ、prime spiralは間違いとして公開やめる。

以上のどれかが実行されないなら、今まで同様、ここで話題の一つとするか、
「問題のあるプログラムを載せているサイトとその議論」というようなスレを立てて、
第一弾といてprime spiralを紹介する。

選択の期限は9月15日とする。
803デフォルトの名無しさん:2007/09/11(火) 10:24:37
いくら作者が非協力的だからって何も落とさなくても。
804デフォルトの名無しさん:2007/09/11(火) 10:28:32
これのどこが悪いのか、頭の悪いおいらにもわかるように書いてくれんかの…。
作者が動いたらやる、で止まってバッシングだけになってるのも別にいいけど、口だけにも見えちゃうお。
805デフォルトの名無しさん:2007/09/11(火) 10:33:34
>>804
作者か?

さっさと>>802に応じろよ。
806デフォルトの名無しさん:2007/09/11(火) 10:39:53
う、やっぱりそう思われちゃうかw
違うって言っても信憑性無いのでROMるね。

でももうスレ違いだしID出る板でやらない?
作者のブログにTB送っとけば伝わるでしょ。
807デフォルトの名無しさん:2007/09/11(火) 10:41:33
>作者か?
ワロスw
808デフォルトの名無しさん:2007/09/11(火) 10:44:33
>>806
802だが、俺は(君が作者だとは)思ってないよ。

>でももうスレ違いだしID出る板でやらない?

これは俺も賛成。でもいきなり行動に移す前に、まず作者の出方を待ち、
その間にやり方を検討したりしようと思っている。
809デフォルトの名無しさん:2007/09/11(火) 10:45:32
prime spiralのダメ出しサイトでも作れば
810デフォルトの名無しさん:2007/09/11(火) 10:52:56
おつ
811デフォルトの名無しさん:2007/09/11(火) 11:02:26
誰が誰だかわかりませんが、もしかして意外と人いる?

>>808
そうですね、乱数スレなんでこのアルゴリズムに対する駄目だしができれば、別にここでもいいとは思うんですけど。

作者が何もしなくてもこれが駄目だって言う根拠を人の目に着くとこに置いとければ>>763で危惧してることも起きないだろうし。
まあ間違いがあるなら本人に認めてもらうってのも大事だとは思うんだけど、でも本人ここもう見てない可能性もあるので、
何かしらの手段で存在伝えた方がいいような。

>>809
よろ
812デフォルトの名無しさん:2007/09/11(火) 11:09:49
論文が出てなかったり、世間でのまともな評判がない時点で、
prime spiralを使う人はほとんどいないだろう。
(使おうと思う人がいるなら、その程度も気にしないのレベルということ)

とりあえず>>802も含めてウザイのでとっとと別スレにでもいってほしいね
813デフォルトの名無しさん:2007/09/11(火) 11:21:21
>>812
了解。一応、他の人の意見も聞いて、ここで技術的な議論ができないようなら、別スレ立てて誘導することにする。
814デフォルトの名無しさん:2007/09/11(火) 18:31:32
>>801
趣旨なんてあったっけ。

専用スレに隔離は同意
815デフォルトの名無しさん:2007/09/11(火) 18:39:17
どうでもいいけどprime spiralって名前、
mersenee twisterを意識しすぎてワタラ。
816デフォルトの名無しさん:2007/09/11(火) 20:00:45
スレが伸びてるからもう他の話題で盛り上がってんのかと思ったらなにこの流れ? (´Д`;)

よくもまぁブラフでここまで引っ張るもんだ。
僅かな出力でその後の出力が予測可能ってのがブフラだってことを証明するコードやるからいい加減大人しくなれ。

#include <stdio.h>

#include "trickrng.h"

using namespace tricklib;
817デフォルトの名無しさん:2007/09/11(火) 20:01:33
void tune_dice(uint32_t sync_length, dynamic_prime_spiral_dice *a, dynamic_prime_spiral_dice *b)
{
    //  *a の初期化状態が極端に酷い場合には同じ値が sync_length を大幅に上回る回数出力されます。
    //  *a の初期化状態が極端に酷くない場合でも、1/2^32の確率で同じ値が sync_length を上回る回数出力されます。

    assert(0 < sync_length);
    assert(sync_length < 0x80000000);

    //  sync_mask の算出。
    uint32_t sync_mask = 1;
    while(sync_mask < sync_length)
    {
        sync_mask <<= 1;
    }

    //  sync_length を精確に反映させる為に index を調整。
    *(((uint32_t*)(a +1)) -1) = sync_mask -sync_length;
    //  ↑この行は a->index = sync_mask -sync_length; の意。private なので本来はアクセスしちゃいけない所。

    //  *a を sync_mask で XOR したものを *b とする。
    for(int i = 0; i < sizeof(*a)/ sizeof(uint32_t); ++i)
    {
        ((uint32_t*)b)[i] = ((uint32_t*)a)[i] ^sync_mask;
    }
}
818デフォルトの名無しさん:2007/09/11(火) 20:02:27
int main(int argc, char *args[])
{
    if (2 <= argc)
    {
        dynamic_prime_spiral_dice dice_a, dice_b;
        tune_dice(atoi(args[1]), &dice_a, &dice_b);
        uint32_t i = 0, a, b;
        do
        {
            a = dice_a.roll();
            b = dice_b.roll();
            printf("\r0x%08.8X:0x%08.8X:%010d\n", a, b, i++);
        }
        while(a == b);
    }

    return EXIT_SUCCESS;
}
819デフォルトの名無しさん:2007/09/11(火) 20:02:53
「証明」の意味も分かってなかったのか・・・
(´A`)
820デフォルトの名無しさん:2007/09/11(火) 20:03:18
で、prime spiral の出力品質で盛り上がってくれてるとこ、悪いんだけど、

・乱数列にランダムアクセスが可能。
・出力の難収束性。
・tune_dice()みたいな処理が可能。

当初は"乱数列の品質"だと思ってたけど、これだけ売りがあれば出力品質が
悪いなんてことが多少証明されたところで、prime spiral はもうすでにひとつの
擬似乱数アルゴリズムとしてありだと思うですよ。(もちろん、それでは無相関性
擬似乱数アルゴリズムとは言えないんですけど。)
出力品質がよいということが証明されればさらに素晴らしいことなんでまた今度
dieharder でのテストぐらいはやっとこうと思うです。

じゃぁね。
821デフォルトの名無しさん:2007/09/11(火) 20:08:02
>>820
×当初は"乱数列の品質"だと思ってたけど、
○当初は"乱数列の品質"だけだと思ってたけど、
822デフォルトの名無しさん:2007/09/11(火) 20:12:36
続きは別スレ立ててやれよ。
823デフォルトの名無しさん:2007/09/11(火) 20:33:54
そして過疎スレへ……

保守頼んだ。
824デフォルトの名無しさん:2007/09/11(火) 21:14:24
>>816
>よくもまぁブラフでここまで引っ張るもんだ。
>僅かな出力でその後の出力が予測可能ってのがブフラだってことを証明するコードやるからいい加減大人しくなれ。

どう証明になっているか説明してくれんか。

もし僅かな出力でその後の出力の予測が不可能なら、
例えば、最初の600個が一致して、601個目が一致しない例を示せばいい。

しかし、現実にはそういう例は出せない。これは予測可能であることのヒントだ。
825デフォルトの名無しさん:2007/09/11(火) 21:22:32
>>820
「思うです」とか変な書いている馬鹿は本人か。
826デフォルトの名無しさん:2007/09/11(火) 21:22:56
>>825
「思うです」とか変な日本語を書いている馬鹿は本人か。
827デフォルトの名無しさん:2007/09/11(火) 21:27:54
>>824
そこのコードをコンパイルしてコマンドライン引数に600を指定してみw
828デフォルトの名無しさん:2007/09/11(火) 21:29:32
>>820
> 乱数列にランダムアクセスが可能。
(擬似)乱数列にランダムアクセスできることの意義を見出せないんだが……。
829デフォルトの名無しさん:2007/09/11(火) 22:07:35
>>820
> 無相関性擬似乱数アルゴリズム
超古典だが、LFSR で特性多項式が原始多項式(因数分解不可)の場合が
無相関と証明されてなかったっけ?
830デフォルトの名無しさん:2007/09/11(火) 22:15:54
>>829
それは入力に対して出力に相関性があらわれないことだから、意味が違うんじゃね?
831デフォルトの名無しさん:2007/09/11(火) 22:34:37
>>828
膨大なデータを扱うシミュレーションなんかで
乱数を元に作成した一時的にいらないデータを破棄して
後で必要になったときには再計算することができるとかそんな利点があると思うけど。
832デフォルトの名無しさん:2007/09/11(火) 22:43:07
>>827
何かおかしいと思ったら、indexを後からいじってるじゃん。
833デフォルトの名無しさん:2007/09/11(火) 22:44:12
>>831
初期ベクトル持っていれば再計算できる。
834デフォルトの名無しさん:2007/09/11(火) 22:49:02
>>830
乱数が無相関という場合に、それ以外の意味があるの? 独立性を議論してる
わけじゃないよね。
835デフォルトの名無しさん:2007/09/11(火) 22:49:58
>>832
それがなにか問題なのか?
836デフォルトの名無しさん:2007/09/11(火) 22:52:40
>>833
可能か不可能かで言えばそうだけど、必要な計算量に雲泥の差がでるぞw
837デフォルトの名無しさん:2007/09/11(火) 22:56:47
>>833
初期ベクトルではなく状態ベクトルじゃね?
838デフォルトの名無しさん:2007/09/11(火) 23:23:56
>>836
再現ポイントの初期ベクトルなら同じだろ。
839デフォルトの名無しさん:2007/09/11(火) 23:58:00
>>838
初期ベクトルではなく状態ベクトルじゃね?
840デフォルトの名無しさん:2007/09/12(水) 01:49:43
>>835
index_maskとindexの組み合わせを同時に変えていいなら、そりゃ簡単に一部が一致する系列を作れる。index_mask^indexが同じ範囲は同じになるからな。

実際のところindex_maskは、各ビット位置が表す周期で系列を入れ替えているだけ。
だから、エントロピープールとindex_maskの組み合わせと、indexと出力系列の組み合わせは一対一に対応する。

だからindexと最低限の出力系列(各素数の和)が得られれば、逆算ができるわけだ。
ただ、indexがどこから始まっているからわからないなら、最小の出力系列で、その後が完全にわかるわけではない。
ただ、ランダムアクセス可ということでindexが0から始まるものなら最低限の出力系列から、すべてがわかる。
また、indexの開始が不明でも、その後に出てくる数列は入れ替わっているだけで同じものが同じ分布で出現する。

例えば、コマンドライン引数に2を指定して出力するとこうなる。●は同じところ、△はずれているだけのところ

0x331EE257:0x331EE257:0000000000 ●
0xAC31D68A:0xAC31D68A:0000000001 ●
0xCA4DAAEF:0x0A4D250D:0000000002 △
0x2CEE50F2:0xDD950B6E:0000000003 △
0x91448FED:0x91448FED:0000000004 ●
0x11C949BE:0x11C949BE:0000000005 ●
0x0A4D250D:0x563953EE:0000000006 △
0xDD950B6E:0x9C9C9179:0000000007 △
0x36D2A9DB:0x36D2A9DB:0000000008 ●
0x8B051CF8:0x8B051CF8:0000000009 ●
0x563953EE:0x9D3900E1:0000000010 △
0x9C9C9179:0x206E7721:0000000011 △
0xDC87B479:0xDC87B479:0000000012 ●
0x20D18FD0:0x20D18FD0:0000000013 ●
0x9D3900E1:0x7B1CC024:0000000014 △
0x206E7721:0x3F4B54FE:0000000015 △
0x1B94729E:0x1B94729E:0000000016 ●
841デフォルトの名無しさん:2007/09/12(水) 01:53:51
>>839
MTの場合、初期ベクトルと状態ベクトルの違いなんてないだろ。
842デフォルトの名無しさん:2007/09/12(水) 01:59:47
>>841
ないから、敢えて初期ベクトルとは呼ばずに状態ベクトルと呼ぶでしょ。
リファレンス実装でも state vector となってるし。

いずれにせよ、それ保存しとけば全然問題ないって主張には同意。
843・∀・)っ━━━┓:2007/09/12(水) 02:04:21
すまん、MTの乱数状態をバイナリデータに保存できるサンプルってある?
844デフォルトの名無しさん:2007/09/12(水) 02:21:32
>>840
つまりindex_maskは何の役にも立っていないな。
845デフォルトの名無しさん:2007/09/12(水) 02:28:24
MT の調律の逆変換。これで、出力から状態ベクトルを計算できる。
/* Tempering */
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680UL;
y ^= (y << 15) & 0xefc60000UL;
y ^= (y >> 18);

/* 逆変換 */
y ^= y >> 18;
y ^= y << 15 & 0xefc60000UL & (1L << 15*2) - 1;
y ^= y << 15 & 0xefc60000UL & - (1L << 15*2);
y ^= y << 7 & 0x9d2c5680UL & (1L << 7*2) - 1;
y ^= y << 7 & 0x9d2c5680UL & - (1L << 7*2) & (1L << 7*3) - 1;
y ^= y << 7 & 0x9d2c5680UL & - (1L << 7*3) & (1L << 7*4) - 1;
y ^= y << 7 & 0x9d2c5680UL & - (1L << 7*4);
y ^= y >> 11 & - (1L << (32 - 11*2));
y ^= y >> 11 & (1L << (32 - 11*2)) - 1;
846・∀・)っ━━━┓:2007/09/12(水) 02:30:57
セキュリティ関連には向かないわな。てか本当にセキュアな乱数使いたいならハードウェアノイズでいいと思う。
847デフォルトの名無しさん:2007/09/12(水) 06:26:54
>>840
なに言ってんだ、おまえ?

>例えば、最初の600個が一致して、601個目が一致しない例を示せばいい。

こんなことを言ってたのはお前自身だぞ、アホかw
848デフォルトの名無しさん:2007/09/12(水) 06:40:19
お、昨夜は作者が発言したのか。
>>816-818を見てちょっと安心したんだろうな。
849デフォルトの名無しさん:2007/09/12(水) 06:59:01
>>840
>だからindexと最低限の出力系列(各素数の和)が得られれば、逆算ができるわけだ。

>>816-818 のコードで1000000とか指定して1000001個目を予測してみてw
逆算できるんだろ?1000000もあれば十分すぎるだろ?
850デフォルトの名無しさん:2007/09/12(水) 07:46:31
>>840
>index_maskとindexの組み合わせを同時に変えていいなら、そりゃ簡単に一部が一致する系列を作れる。index_mask^indexが同じ範囲は同じになるからな。

だからになにがいけないんだ?
どのみちそれは prime spiral の初期状態として存在するパターンだろ?
851デフォルトの名無しさん:2007/09/12(水) 08:03:14
最悪板でお願いします
852デフォルトの名無しさん:2007/09/12(水) 08:21:25
数学板にでも移転すれば?
あっちの乱数スレは落ちてるみたいだが
853デフォルトの名無しさん:2007/09/12(水) 08:32:39
>>850
> どのみちそれは prime spiral の初期状態として存在するパターンだろ?
agree

ただ暗号の評価基準として「ある程度の長さの出力を見たときに、その内部状態が
ユニークに特定できる」というのは、かなり珍しい気がする。完全に特定できなくとも
範囲を絞り込めるなら、それで十分に辛い。

あとほかの品質基準として分布の良し悪しとかもあるんだが、その辺は統計的に
どうなんだろうな。独立性検定とかやってみた?
854デフォルトの名無しさん:2007/09/12(水) 08:52:59
いつから暗号の話になったんだw
855デフォルトの名無しさん:2007/09/12(水) 09:50:27
門外漢は黙ってろ
856デフォルトの名無しさん:2007/09/12(水) 10:20:33
>>847
最初というのはindexで0からという意味だった。
書き方が足りないのは悪かった。
857デフォルトの名無しさん:2007/09/12(水) 10:26:01
>>849
indexが0から始まるとう前提でOK?
858デフォルトの名無しさん:2007/09/12(水) 10:33:08
>>850
最低限の出力系列で、全パターンに出現する値がわかってしまうから。
indexが不明なら、順番まではわからないかもしれないが、何が2回以上出て、
何が全く出ないかは、簡単にわかってしまう。indexが確定すれば、全部が分かる。
どういうことかというと、相関性が非常に高いってことだ。
859デフォルトの名無しさん:2007/09/12(水) 10:36:29
>>858
実際のところ、出ない値が確定した時点で、乱数とはもはや呼べない。
860デフォルトの名無しさん:2007/09/12(水) 10:47:48
MTが駄目って話が全くでなくなったけど、撤回するの?
861デフォルトの名無しさん:2007/09/12(水) 10:48:43
>>858
理由になってないし、順番がシャッフルされている状態で本当に特定できるのか?
862デフォルトの名無しさん:2007/09/12(水) 11:04:45
当たり前
863デフォルトの名無しさん:2007/09/12(水) 11:14:45
>>861
indexとindex_maskが、系列の入れ替えだけで、分布を変えているわけではないことはわかるよな?

次に考えることは、index_mask=0で、indexが0から始まる場合。
この系列が、indexとindex_maskのあらゆる組み合わせの入れ替えと同じということから
分布だけに関しては、index_maskがないアルゴリズムに置き換えることができる。

あとは未知数(素数の和)の数の出力から連立方程式を解けばわかる。
864デフォルトの名無しさん:2007/09/12(水) 11:52:36
値の分布を特定できない疑似乱数なんてあるの?
865デフォルトの名無しさん:2007/09/12(水) 12:04:17
>>864
多くのものは、特定するまでに必要な情報量の差があり、
また、アルゴリズムの種類によっては、特定できないものもある。ググればわかると思うが。
866デフォルトの名無しさん:2007/09/12(水) 18:19:45
似非乱数スレでも立てるか?
867デフォルトの名無しさん:2007/09/12(水) 20:42:48
なんかもうグダグダだな。
868デフォルトの名無しさん:2007/09/13(木) 01:51:33
>>866
ワラタ
869デフォルトの名無しさん:2007/09/13(木) 06:00:59
擬似擬似乱数スレとか。
870デフォルトの名無しさん:2007/09/13(木) 12:07:02
>>856-857
それって種の一部が分かればってことだろ?
出力だけから分かるってのと種の一部も必要ってのじゃ次元の違う話だ。
いくらなんでも見苦しすぎw
871デフォルトの名無しさん:2007/09/13(木) 12:41:40
頼むからどっかヨソでタイマンしててくれ。
872デフォルトの名無しさん:2007/09/13(木) 12:44:25
>>870
インデックスの初期値にシードを使っていたのは盲点だった。
そこは俺が悪いから謝る。俺は作者と違い、自分の間違いは認めるからな。

でも、目的は俺の評価ではなくprime spiralの評価であることを忘れてもらったら困る。

で、今回、

最低限の出力系列で、全パターンに出現する値がわかってしまうこと。
出ない値が確定した時点で、乱数とはもはや呼べない。

という問題点が明らかになったと思うが、そのことについてはどう思うの?

また、

MTが駄目って話が全くでなくなったけど、撤回するの?

とも言われているが、こういう都合の悪い点は見ないのか?
873デフォルトの名無しさん:2007/09/13(木) 12:56:26
他所でやれマジで。

出力以前に周期が短すぎて話にならん。
素数で割ってるから周期を伸ばすのにとんでもなく苦労するぞ。
次元分布がどうこう言ってたがn次元で均等分布するためには
最低でもnビットの状態空間が必要だからな。
874デフォルトの名無しさん:2007/09/13(木) 13:48:54
>>872
>>870が作者かどうかに疑問を感じるのだが
875デフォルトの名無しさん:2007/09/13(木) 13:59:22
>>874
どっちでもいいだろ?
もうこんなぐだぐだな話、どっか他所でやれば?
876デフォルトの名無しさん:2007/09/13(木) 14:05:08
>>875
別に他に話すネタがあるわけじゃないし、ぐだぐだでも誰も困らんだろ。作者以外はw
他にまともな議論があって、それが阻害されているのでないなら、続けて問題なし。
877デフォルトの名無しさん:2007/09/13(木) 14:24:46
>>875
見たくないなら見なくてもいいんだよ?
878デフォルトの名無しさん:2007/09/13(木) 16:43:20
でもやっぱりIDぐらいは出てほしいと思う俺
879デフォルトの名無しさん:2007/09/13(木) 22:26:33
技術的な議論が続くなら歓迎なんだけどね
880デフォルトの名無しさん:2007/09/14(金) 10:03:37
問題点が明らかになったら、急に静かになったな。w
881デフォルトの名無しさん:2007/09/14(金) 14:05:14
前回、騒ぐだけ騒いで大恥かいたから自重してんだろw
882デフォルトの名無しさん:2007/09/14(金) 14:24:19
そもそもお前ら、32次元のことを 2^32 次元とtypoでもなく本気で
記述するようなシトとよく対話する気になるな・・・
ネットウォッチ板のネタじゃないのかこれは。
883デフォルトの名無しさん:2007/09/14(金) 15:24:20
ちょっとネタ投下してみる。
マジメな乱数アルゴリズム。
周期2^521-1で16次元に均等分布します。

class MLS521
{
private:
unsigned long st[ 16 ], x, y, p;
public:
MLS521( unsigned long seed ) {
x = 0x41C64E6D * seed + 0x3039, p = 0, y = 0;
for (unsigned long i=0, s=x, t=~x, u; i<16; i++) {
u = t, t = s, s = ( u << 1 ) ^ ( t >> 31 );
st[ i ] = s ^= ( u << 6 ) ^ ( t >> 26 );
}
for (unsigned long i=1; i<16; i++) {
y ^= st[ i ];
y = ( y << 2 ) ^ ( y >> 30 );
y ^= y >> 12;
}
y ^= x;
}
unsigned long next( void ) {
unsigned long r = y, s = r ^ ( r >> 21 );
unsigned long u = st[ p ], v = st[ ( p + 1 ) & 15 ];
st[ p ] = x, ++p &= 15;
x ^= ( u << 23 ) ^ ( v >> 9 );
r = ( r << 2 ) ^ ( r >> 30 );
y = r ^ ( r >> 12 ) ^ x ^ v;
return s ^ ( s << 6 ) ^ ( s << 13 );
}
};
884デフォルトの名無しさん:2007/09/14(金) 15:28:37
>>881
その割には、MTがダメというのを取り下げていないし、サイトもそのままだし、
prime spiralの問題点も認めようとしないね。
885デフォルトの名無しさん:2007/09/14(金) 15:44:53
取り下げたら負けかなと思ってる
886デフォルトの名無しさん:2007/09/14(金) 16:02:10
美しい擬似乱数
887デフォルトの名無しさん:2007/09/14(金) 19:15:11
>>883
x と y も状態空間なのかな?
どっちか片方だけ状態空間で十分のような気がするが。

ソースだけざっと見ても周期はわかんないけど、
2ベキ長の配列に変数を合わせてメルセンヌ指数ビットの状態空間を
実現しつつインデックスの更新を高速にしているのはわかった。
そこに工夫がある。

少なくともprimeなんちゃらよりはずっといい。
888デフォルトの名無しさん:2007/09/15(土) 00:51:04
>>883
XorShiftに似てるね。
というか>>18の変数が4個なのを16個に拡大したような感じなのかな。

こういうのって周期は変数を減らして増やしていけば予想できそうなんだけど
均等分布、というのはどうやって分かるの?
889デフォルトの名無しさん:2007/09/15(土) 17:41:13
というか作者もうここ見てないんじゃないのかな
なんかこのスレってバカが多いみたいだし
890デフォルトの名無しさん:2007/09/15(土) 17:48:57
そうだね。そういうことにしとけばいいんじゃないかな。
891デフォルトの名無しさん:2007/09/15(土) 20:16:47
はいはい
892デフォルトの名無しさん:2007/09/15(土) 21:05:07
>>889
見ていると思うよ。作者ほどのバカもいなかったと思うけど。
893デフォルトの名無しさん:2007/09/15(土) 21:52:23
うむ
894デフォルトの名無しさん:2007/09/17(月) 09:44:01
オリジナルのMTの実装(mt19937ar.c)の初期化についてちょっと質問させてください。

mt19937ar.cは初期状態を線形合同法(の変形?)で与えていて、
>>38なんかにあるように「初期化が悪い」と言われていますが、
実際のところどうなんでしょう。根拠のある情報を見つけられないでいます。

SFMTやWELLの論文は、MT19937の0超過状態からの回復が遅いことを指摘してます
(実装ではなくMT19937のアルゴリズム・パラメータに対する指摘)。
が、mt19937ar.cでの初期状態は0超過ではないようで、
これらの論文はmt19937ar.cの初期化が悪いことを示してはいないようです。

0-1の出現確率については問題がないけど、別のどこかの分布が悪く、
それが解消されるまで結構時間がかかるとか、そういう話なんでしょうか。
当方計算機屋なんで数学はサパーリでして...
895デフォルトの名無しさん:2007/09/17(月) 10:55:57
>>894
mt19937ar.cは初期化問題に対応したバージョンだから問題ないそうだ。
その前のコードは見たことないから分からんが。

>SFMTやWELLの論文は、MT19937の0超過状態からの回復が遅いことを指摘してます
こりゃ全くその通り。
三項式だし、マトリックスの掛け方の都合でそうなる。
でも現実的には超長周期だから意図的な初期ベクトルを与えない限りは
0超過の状態は出ない。

mt19937ar.cに関しては普通に使う限りは問題は全くないよ。
896デフォルトの名無しさん:2007/09/17(月) 11:09:27
>その前のコードは見たことないから分からんが。
これが笑える(笑えない)ことに、
「アセンブラでMT高速化しますた!」
みたいな第三者のライブラリでたまに古い初期化コードが残ってたりするんだわ。
最適化MTライブラリを使うなら、おとなしくSFMT使え。
897894:2007/09/17(月) 18:01:44
>>895-896
ありがとうございます。
現在のバージョンには問題がないということですね。参考になりました。
898デフォルトの名無しさん:2007/09/18(火) 13:28:04
>>802
作者から反応がないようなので、そろそろMLへの突入と、スレ立てを実行する。
899デフォルトの名無しさん:2007/09/18(火) 13:45:19
予告キター!!!!!!!!!!!!!!!!

wktk
900デフォルトの名無しさん:2007/09/18(火) 17:33:15
>>898
MLは入りたくないから内容ここで晒して欲しい
901デフォルトの名無しさん:2007/09/18(火) 17:43:01
cppll ならウェブで見れる
902デフォルトの名無しさん:2007/09/18(火) 17:50:42
>>900
心配するなw両方で晒すからw
903デフォルトの名無しさん:2007/09/18(火) 21:00:59
なんというWeb1.0
904デフォルトの名無しさん:2007/09/18(火) 21:37:16
祭りが始まるのか?
905デフォルトの名無しさん:2007/09/18(火) 22:39:24
残り100レス切った現状じゃすぐ吹っ飛ぶな
今のうちさっさと祭り専用スレたててくれ>>898
906デフォルトの名無しさん:2007/09/18(火) 22:53:55
作者が無視しつづけりゃ祭りにもならん
反応してくれることに期待
907デフォルトの名無しさん:2007/09/22(土) 15:31:52
結局どっちも口だけか
908デフォルトの名無しさん:2007/09/22(土) 22:07:44
疑似乱闘?
909デフォルトの名無しさん:2007/09/22(土) 22:10:34
910デフォルトの名無しさん:2007/09/25(火) 17:25:29
ちょっとした小ネタ。
一様乱数から正しくNの剰余を求める場合は
RAND_MAXからのNの剰余以下の数字は棄却しましょう。

unsigned int rand0toNminus1( unsigned int n )
{
unsigned int m, r;
if ( n == 0 ) return 0;
m = RAND_MAX % n;
do {
r = rand();
} while ( r <= m ) ;
return r % n;
}
911デフォルトの名無しさん:2007/09/25(火) 17:38:46
それ改善できるよ
912デフォルトの名無しさん:2007/09/25(火) 18:00:21
本当?
どうすればいいの?
913デフォルトの名無しさん:2007/09/25(火) 21:32:44
>>910
n=3のときを考えればどこを修正すればいいかわかるな

unsigned int rand0toNminus1( unsigned int n )
{
  unsigned int m, r;
  if ( n == 0 ) return 0;
  m = RAND_MAX - RAND_MAX % n;
  do
  {
    r = rand();
  } while ( r <= m ) ;
  return r % n;
}
914デフォルトの名無しさん:2007/09/25(火) 22:08:27
>>913
え?
RAND_MAXから剰余を引いても結果は同じだと思いますが。

今、仮にRAND_MAXが255でNが10だとした時に、
0-255が均等に1回ずつ出現したとした場合、
m=0-5が26回、m=6-9が25回出てしまうので
r=0-5の場合はやり直しにしようという考えなのですが…
こうするとm=0-9が均等に25回ずつ出ますよね?
915デフォルトの名無しさん:2007/09/25(火) 22:18:56
ああそうかRAND_MAXが2^n-1とは限らないのか。
ちょっと考え直してみます。
916デフォルトの名無しさん:2007/09/25(火) 22:19:20
>>914
m = RAND_MAX % n;//nが小さいとき、ここでmの値が小さくなるのでまずい(計算量がO(RAND_MAX / n))
m = RAND_MAX - RAND_MAX % n//こちらだとnが小さくても、大きくても大丈夫(計算量は定数オーダー)
917デフォルトの名無しさん:2007/09/25(火) 22:20:03
>>913
ちょwループ回数多すぎw
918デフォルトの名無しさん:2007/09/25(火) 22:22:58
>>917
本当だ。不等号勘違いしてたやw
913は無視してくれ
919デフォルトの名無しさん:2007/09/25(火) 22:28:09
unsigned int rand0toNminus1( unsigned int n )
{
unsigned int m, r;
if ( n == 0 ) return 0;
m = ( RAND_MAX % n ) * n;
do {
r = rand();
} while ( r >= m ) ;
return r % n;
}

これでいいですか?
これなら間違いないですよね。
なんか眠くて頭が回らなくなってきました。
920デフォルトの名無しさん:2007/09/25(火) 22:29:32
すいません。
m = ( RAND_MAX / n ) * n;
ですね。
921デフォルトの名無しさん:2007/09/25(火) 22:30:36
>>919
>>911 がボケかましてるだけで元のコードのままでいいと思うんだが。
922デフォルトの名無しさん:2007/09/25(火) 22:37:09
>>921
そうですよね、間違ってないですよね。
RAND_MAXが2^n-1である必要もないですね。
最初に考えたときにRAND_MAXがいくつでも問題なかったのを忘れてました。
923デフォルトの名無しさん:2007/09/25(火) 22:58:49
しつこいけどもう一つ、永久ループ防止。

unsigned int rand0toNminus1( unsigned int n )
{
unsigned int m, r;
if ( n == 0 || n > RAND_MAX ) return 0;
m = RAND_MAX % n;
do {
r = rand();
} while ( r <= m ) ;
return r % n;
}
924デフォルトの名無しさん:2007/09/25(火) 23:30:26
>>923
>if ( n == 0 || n > RAND_MAX ) return 0;

if ( n == 0 ) return 0;
if ( n > RAND_MAX ) return (unsigned int)(rand() *(double)n /(double)RAND_MAX);

とかのほうがよくね?
925デフォルトの名無しさん:2007/09/25(火) 23:40:35
てか n > RAND_MAX って条件はおかしくね?
確かに n == RAND_MAX も除外しないと無限ループになるけど、
n == RAND_MAX は正常な値を返すべき値域だろ。
926デフォルトの名無しさん:2007/09/26(水) 04:56:20
>>923
rand() を使うなら return r % n; はまずい。
線形合同法だと下位ビットの質が低いからだ。
>>923 は、n が 2 なら、VC++ で周期は 131072 しかない。
古いCコンパイラなら周期が 2 になることもある。
例えば、RAND_MAX が 32767 で n が 100 なら、
下のようにできるだけ上位ビットを使うべきだ。
unsigned rand0to99(void)
{
  unsigned r;

  for (;;) {
    r = rand();
    if ( r < 25600 ) return r >> 8;
    if ( r < 32000 ) return ( r - 25600 ) >> 6;
    if ( r < 32400 ) return ( r - 32000 ) >> 2;
    if ( r < 32600 ) return ( r - 32400 ) >> 1;
    if ( r < 32700 ) return r - 32600;
  }
}
927デフォルトの名無しさん:2007/09/26(水) 08:35:04
間抜けですか。
928デフォルトの名無しさん:2007/09/26(水) 09:33:52
>>926
線形合同法の下位ビットの周期が短いことくらい皆知ってるだろ。
どう考えても論点はそこじゃない。
つか、RAND_MAXやNを固定してどうする。
929デフォルトの名無しさん:2007/09/27(木) 02:37:17
こんなのはどうでしょう?
if ( n == 0 || n == RAND_MAX + 1 ) return rand();
if ( n > RAND_MAX + 1 ) return RAND_MAX + 1;

このコードRAND_MAXが0xffffffffの場合おかしくなるんで
マクロで分けるべきかもしれません。
もう誰も見てないかな。
930デフォルトの名無しさん:2007/09/27(木) 12:51:04
RAND_MAXが 0x7ffffff で255くらいまでの乱数なら
rand() % n;
で、実用上ほとんど問題ないと思うんだが。

つか、おまいら、上にあげたような面倒なことしてないだろ?!
正直に吐いてごらん。
931デフォルトの名無しさん:2007/09/27(木) 13:26:38
してないよ
実用上ほとんど問題ないから
932デフォルトの名無しさん:2007/09/27(木) 18:48:22
n 以上の素数の剰余で n 未満の値がでるまでループさせるってだけで
偏り関係の問題もおおむね解消されるからそれぐらいはやったほうが
いいよなぁと思いつつ、マンドクセ('A`)んで、いつもやってません。
933デフォルトの名無しさん:2007/09/27(木) 18:56:04
934デフォルトの名無しさん:2007/09/27(木) 19:27:35
ヤター、みんなしてない!当然俺も。
乱数なんてrand()で95%以上問題ないし、統計的にやばそうなら
XorShiftとかで十分。はっきりいってMTなんていらんでしょ。

>>933
errno_t rand_s( unsigned int* randomValue);
rand_s 関数は、0 〜 UINT_MAX の範囲の整数の擬似乱数を入力ポインタに書き込みます。
rand_s 関数は、オペレーティング システムを使用して、暗号化によりセキュリティが強化された乱数を生成します。

乱数にまでセキュリティがいるのか。。。?
中身はなんだろ。
935デフォルトの名無しさん:2007/09/27(木) 19:40:58
これってシードを指定できないんだよね?
説明文上は擬似乱数ってなってるけど、実質的には真性乱数じゃね?
936デフォルトの名無しさん:2007/09/27(木) 19:59:53
>>934
中身が何なのかわからないけど、
類似の API の解説を見ると乱数APIにおけるセキュリティとは

・(下手なシードの選定によるリスクを回避するため)シードはユーザ毎にOSが管理する
・シードは呼び出しプロセスのユーザイベント(キーボード、マウス操作等)その他物理的状態
 も用いて更新(算出)される
・当然他のユーザのシード値は見えない

とシード推測による攻撃を無効化することとMSは考えている模様。
937デフォルトの名無しさん:2007/09/27(木) 20:53:17
>>930
C FAQの方法を使ってる
ttp://www.kouno.jp/home/c_faq/c13.html#16
938デフォルトの名無しさん:2007/09/27(木) 21:37:51
>>930
私も>937と同じ。実は、剰余を使うよりも(整数除算は整数乗算に置き換えられるため)処理速度も速い罠。
# いや、速度を求めちゃいないが。
939デフォルトの名無しさん:2007/09/28(金) 02:53:56
rand() * n / (RAND_MAX+1)
じゃ、なんでダメなの? 掛け算のビット幅が足りると仮定しての話だけど。
940デフォルトの名無しさん:2007/09/28(金) 07:06:47
いいんじゃない?しかし(double)を全部につけとかないと、
rand() * n
ここでintを超えちゃう面倒なバグが出そうだから、>>937になってるじゃない?
941デフォルトの名無しさん:2007/09/28(金) 08:14:25
>いいんじゃない?しかし(double)を全部につけとかないと、
いいえ、全部につけるなんて阿呆なことをする必要はありません。
942デフォルトの名無しさん:2007/10/01(月) 12:08:03
rand() * n / double(RAND_MAX + 1)
943デフォルトの名無しさん:2007/10/02(火) 02:16:56
俺はそこ派じゃないなw
944デフォルトの名無しさん:2007/10/02(火) 13:12:39
俺もw
せっかく付けるんだから意味あるとこに付けろよw
945デフォルトの名無しさん:2007/10/02(火) 13:43:35
そこ・・・は・・・いや・・・
946デフォルトの名無しさん:2007/10/02(火) 13:48:13
RAND_MAXがINT_MAXより小さけりゃ問題ないじゃん。
947デフォルトの名無しさん:2007/10/02(火) 17:30:04
RAND_MAX==INT_MAXのとき
RAND_MAX+1が0になってマズーだな
948デフォルトの名無しさん:2007/10/03(水) 04:04:26
INT_MAX+1 は 0 になるわけじゃないでしょ。
949デフォルトの名無しさん:2007/10/03(水) 06:31:40
RAND_MAX==-1
950デフォルトの名無しさん:2007/10/07(日) 21:36:53
祭りは終わったのね。
951デフォルトの名無しさん:2007/10/07(日) 21:41:24
そういやMLの件やらスレ立ての件はどうなったんだろう
952デフォルトの名無しさん:2007/10/08(月) 00:17:04
>>951
本当にやっていいならやる。作者がちゃんと対応を取ればしない。
無視しづけるなら、明日にでも立てるわ。
953デフォルトの名無しさん:2007/10/08(月) 01:33:14
もういいよ
飽きた
954デフォルトの名無しさん:2007/10/08(月) 01:40:17
>>852
よろしく
955852:2007/10/08(月) 01:45:12
>>954
いえ、遠慮しておきます
956デフォルトの名無しさん:2007/10/08(月) 01:50:16
>>952
よろしく
957デフォルトの名無しさん:2007/10/08(月) 18:22:47
>>952
うだうだ言ってないで早く早くゥ
958デフォルトの名無しさん:2007/10/09(火) 01:15:49
【危険】とんでもプログラム告発スレッド【悪質】
http://pc11.2ch.net/test/read.cgi/tech/1191860116/
959デフォルトの名無しさん:2007/10/09(火) 22:15:00
あーあ
960デフォルトの名無しさん:2007/10/11(木) 20:26:03
さてそろそろMLに爆撃しに行くか。
961デフォルトの名無しさん:2007/10/12(金) 09:05:43
スレ立てたんならそっちでやってくれ。こちらにはもう書き込むな。

そもそも黙ってやれよ……。
962デフォルトの名無しさん:2007/10/12(金) 09:59:19
嫌だね。次スレ立てるときに>>958をテンプレに入れる。
963デフォルトの名無しさん:2007/10/12(金) 20:57:15
んだよ作者と同レベルで厨房なのかよ
964デフォルトの名無しさん:2007/10/12(金) 21:55:05
毒をもって毒を制すだな。
965デフォルトの名無しさん:2007/10/12(金) 22:12:39
止めてほしいのか?
やるやる言ってほとんど何もしていないじゃないか。

まず最初に非難する前に根拠を示せよ。
966デフォルトの名無しさん:2007/10/12(金) 22:56:13
こんな流れなら次スレいらねえや
もしくは独自乱数ネタを禁止する
967デフォルトの名無しさん:2007/10/12(金) 23:10:46
>>966
いならないならお前が見なければいい。俺は立てるからな。
968デフォルトの名無しさん:2007/10/12(金) 23:11:37
>>965
キミは、何の根拠を聞いているの?
969デフォルトの名無しさん:2007/10/12(金) 23:15:50
埋め
970デフォルトの名無しさん:2007/10/12(金) 23:16:07
>>966
自治厨乙
971デフォルトの名無しさん:2007/10/12(金) 23:17:42
      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < \\1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    
972デフォルトの名無しさん:2007/10/12(金) 23:18:37
1000Get!!!
973デフォルトの名無しさん:2007/10/12(金) 23:58:50
【神奈川】犬に「かめ」と命名した男を逮捕 10歳男児が噛み付かれて軽傷
http://news22.2ch.net/test/read.cgi/newsplus/1192193946/
974デフォルトの名無しさん:2007/10/13(土) 00:35:04
命令
975デフォルトの名無しさん:2007/10/13(土) 01:42:06
外人がCome here!と犬に言ってたのを犬の種類を言ってるのだと勘違いして
カメと命名された種類があるらしいな。
Come hereがカメに聞こえたらしい。
976デフォルトの名無しさん:2007/10/13(土) 07:59:27
横浜や神戸の屋号に多い、「亀屋」もcome hereを聞き違えたもの。
977デフォルトの名無しさん:2007/10/13(土) 10:39:04
中部地方の地名にある、「尾張」もwarningを聞き間違えたもの。
978デフォルトの名無しさん:2007/10/13(土) 11:05:49
ここに来て民明書房か
979デフォルトの名無しさん:2007/10/13(土) 16:30:27
>>975
なにその文明開化
980デフォルトの名無しさん:2007/10/15(月) 00:51:20
【神奈川】犬に「かめ」と命令した男を逮捕 10歳男児が噛み付かれて軽傷
http://news22.2ch.net/test/read.cgi/newsplus/1192193946/
981デフォルトの名無しさん:2007/10/15(月) 03:14:12
8ビットと言いたかったのでは
982デフォルトの名無しさん:2007/10/15(月) 08:30:40
誤解のないようオクテットと言えば良かったのに
983デフォルトの名無しさん:2007/10/15(月) 09:15:21
>>980

^^;
984デフォルトの名無しさん:2007/10/15(月) 09:17:44
【プログラム技術】スレに「うめ」と銘銘した男が入院 ニートが群がって重症
http://news22.2ch.net/test/read.cgi/newsplus/1192193946/
985デフォルトの名無しさん:2007/10/16(火) 15:03:28
15
986デフォルトの名無しさん:2007/10/16(火) 22:17:20
擬似乱数とビビアン・スーは良く似てる
987デフォルトの名無しさん:2007/10/16(火) 22:55:45
ビビアン・スー
ギジラン・スー

わろた
988デフォルトの名無しさん:2007/10/16(火) 23:54:21
すばらしい洞察
989デフォルトの名無しさん:2007/10/17(水) 08:36:34
おもしろいじゃないか
990デフォルトの名無しさん:2007/10/17(水) 12:53:18
好きなもの:サイコロ
趣味・特技:チンチロリン
991デフォルトの名無しさん:2007/10/17(水) 20:29:24
9
992デフォルトの名無しさん:2007/10/17(水) 22:21:09
8
993デフォルトの名無しさん:2007/10/17(水) 22:35:35
994デフォルトの名無しさん:2007/10/17(水) 22:36:03
うめ
995デフォルトの名無しさん:2007/10/17(水) 23:00:28
RANDOMIZE(5);
996デフォルトの名無しさん:2007/10/17(水) 23:05:32
997デフォルトの名無しさん:2007/10/17(水) 23:10:32
998デフォルトの名無しさん:2007/10/17(水) 23:13:14
999デフォルトの名無しさん:2007/10/17(水) 23:14:07
999
1000デフォルトの名無しさん:2007/10/17(水) 23:14:45
1000乙
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。