擬似乱数at TECH
擬似乱数 - 暇つぶし2ch1:デフォルトの名無しさん
06/04/27 02:19:35
擬似乱数発生器について語ろうか。

2:デフォルトの名無しさん
06/04/27 02:21:19
n * 1103515245 + 12345 mod 2147483647

3:デフォルトの名無しさん
06/04/27 02:26:29
LD A, R

4:デフォルトの名無しさん
06/04/27 02:35:58
>>2
n * 1103515245 + 12345 mod 2147483648
の間違い

5:デフォルトの名無しさん
06/04/27 02:39:25
*(char *)(0xFFBC0161)

6:デフォルトの名無しさん
06/04/27 03:00:43
MT

7:デフォルトの名無しさん
06/04/27 05:52:27
では手始めに、メルセンヌツイスタの荒探しの話題から頼む。

8:デフォルトの名無しさん
06/04/27 06:28:13
数学板
乱数スレ
スレリンク(math板)

電気電子板
【疑似】乱数をつくる【本物】
スレリンク(denki板)

シミュ板
乱数
スレリンク(sim板)

9:デフォルトの名無しさん
06/04/27 14:29:10
ここはム板らしく、あら捜しよりも高速化とか考えた方がいいんじゃない?

10:デフォルトの名無しさん
06/04/27 15:42:25
暗号通信用に擬似乱数生成専用チップがあるようだが

11:デフォルトの名無しさん
06/04/28 11:56:29
ではその仕組みについて講義してくれ

12:デフォルトの名無しさん
06/04/28 14:01:30
擬似乱数ではないが
URLリンク(www.toshiba.co.jp)
URLリンク(www.internix.co.jp)
URLリンク(www.hmi-jp.com)

13:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/04/28 18:39:05
ゲーム用ライブラリとかで、mt19937.cがほとんどそのまま使われているのを見ると
「お前本当に分かっててその乱数発生器を薦めているのか?」と言いたくなる。

15:デフォルトの名無しさん
06/04/28 23:12:59
>>7
>では手始めに、メルセンヌツイスタの荒探しの話題から頼む。 

でかい、重い。

大体、普通の用途でここまで乱数性に拘る場面はそうそうない
(だから喧嘩を売られた knuth もスルーした)。


16:デフォルトの名無しさん
06/04/28 23:42:09
でかいは同意だが、そんな重いか?

17:デフォルトの名無しさん
06/04/28 23:47:00
あーでも初期化は重いかな。ほとんどハッシュ関数だよね、あれ。

まあ周期長いから頻繁に初期化するような使い方はしないが。

18:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/04/29 00:09:50
つか、速くてランダムなやつとなると
やっぱりどれもハッシュ関数みたくなるのな。

20:デフォルトの名無しさん
06/04/29 00:10:17
パチンコで勝つためはどのような乱数をシミュレートすればいいのですか

21:デフォルトの名無しさん
06/04/29 00:12:53
脳内乱数

22:デフォルトの名無しさん
06/04/29 01:01:05
ゲーム用途なら、そこそこ均等に出てくれれば精度自体は8ビットぐらいでも問題ないよな。

23:デフォルトの名無しさん
06/04/29 01:02:49
つうかMTは本家サイト自身が「モンテカルロ法シミュレーションのための擬似乱数」って言ってなかったか?
均等な乱数が超大量に必要な場合に使う、みたいな。

24:デフォルトの名無しさん
06/04/29 01:43:55
ここはまあまあ有意義なスレですね

25:デフォルトの名無しさん
06/04/29 04:20:02
ゲームで言えば、1フレームに数百から数万(雨とかパーティクル)なら線形合同法で十分だろう。
プログラマーには見えても、ユーザーには周期性は見えないよ。

1フレーム数回以下なら、必要なら重くても高品質なほうがいいんじゃない?
AI とか、 ランダムダンジョンとか。

26:デフォルトの名無しさん
06/04/29 07:30:18
>>18それ、まともにM系列のが

27:デフォルトの名無しさん
06/04/29 20:33:09
でも、正直な話、現実での MT の用途の割合なんて

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

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

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

 4.その他:1%

位だと思う。


28:デフォルトの名無しさん
06/04/30 15:17:30
WELLについて調べようとおもったんだけど……
ぐぐっても"well"なんて単語としてありきたりすぎて
関係ないページがヒットしまくりなんだが。
作者的には「より良い」と語呂合わせしたつもりなんだろうが、
いまや情報化社会。物にはなるべく一般的な語とかぶらないような名称をつけて頂きたい。

29:デフォルトの名無しさん
06/04/30 22:18:10
ゲーム用で再現性無くていいなら、時間とユーザーの入力
(その時しかありえないようなPCの状態)を混ぜりゃほぼ
ランダムになる。


30:デフォルトの名無しさん
06/04/30 22:23:18
>>29
その必要も無いのに、
テスト項目に「時間」と「ユーザーの入力」の要素が
入るような実装は、極力避けるべき。

テストの自動化が出来ない。 


31:デフォルトの名無しさん
06/04/30 22:31:53
SSL の証明書作るときのシードにキー入力使ってたな。

32:デフォルトの名無しさん
06/05/03 15:09:15
インターネットを利用したランダム関数できないかな?

33:デフォルトの名無しさん
06/05/03 18:20:08
>>32
パケットが通過する間隔はポアソン分布に従う、とかそういうのを利用するのか?

34:デフォルトの名無しさん
06/05/03 18:58:42
2ちゃんねるを利用したランダム関数欲しい

35:デフォルトの名無しさん
06/05/03 21:02:28
>>18
これ確かに早いけど、種を選ぶのが難点だね。
128ビットで、そこそこ0と1が混じってないと駄目ってのが。
種用に物理乱数とか、遅くても質のいい乱数発生器を別個に使う必要があるなあ

36:デフォルトの名無しさん
06/05/04 00:41:36
>>13
あと、初期化が糞だよねぇ。そのせいでかなり癖のある乱数列が生成される。理論台無し。

37:デフォルトの名無しさん
06/05/04 08:02:03
まあ初期化ルーチンに関しては他の乱数生成関数とかハッシュ関数とか組み込めばええんでない?
xorgensでもMTでもどの擬似乱数でも言えることだけど。

38:デフォルトの名無しさん
06/05/04 08:09:30
MTの初期化ルーチンをそのまま使うときは最初の100万個ぐらいは読み飛ばしたほうがいいらしい。

39:デフォルトの名無しさん
06/05/04 08:14:57
100万の根拠は?

40:デフォルトの名無しさん
06/05/04 08:26:44
統計的としか言いようが無い。
50万とか70万とかいうデータもあるが

41:デフォルトの名無しさん
06/05/04 08:37:49
正確には681,1573個だ。

42:デフォルトの名無しさん
06/05/04 08:51:13
要するにマンコ

43:デフォルトの名無しさん
06/05/04 09:36:18
>>30
再現性がなくなるだけで、時間を加味していればテストは自動化できるだろ。
話それるがユーザー入力だって、ある程度自動化するし。
>>32>>33>34
全部ユーザー入力と一緒じゃね

44:デフォルトの名無しさん
06/05/04 10:57:54
>>38
はつみみなのでソースおせーて

45:デフォルトの名無しさん
06/05/04 12:31:25
初期化が糞な場合、MTみたいに周期がアホみたいに長い疑似乱数はその程度
読み飛ばすだけで癖が抜けるとは思えんのだが。

46:デフォルトの名無しさん
06/05/04 12:51:05
>>40
その統計の在処をぜひ

47:デフォルトの名無しさん
06/05/04 14:23:52
じゃあみんなで初期化関数考えようぜ。
(新しい擬似乱数考えるのと同じになりそうだが)

48:デフォルトの名無しさん
06/05/04 14:37:16
>>47
そんなの Windows なら CryptGenRandom 、Unix系なら /dev/urandom を使う・・・てのが常識では?


49:デフォルトの名無しさん
06/05/04 15:30:21
MD5だっけ?
まあ暗号用に使うんじゃなくてあくまで擬似乱数用の種だからCRCとかでもいいような希ガス

50:デフォルトの名無しさん
06/05/04 16:47:54
どうでもいいならシステムタイマー使えばいいし
厳密にやりたきゃ>>48の使えばいいし。

51:デフォルトの名無しさん
06/05/04 19:56:01
結局、MT 厨は、そのネームバリューを闇雲に信じるだけで、
自分で乱数性の検証はしていなかったんだな。


52:デフォルトの名無しさん
06/05/05 18:18:49
>>51
当たり前だろw
偉い人が使えるって言えば使うだけ

53:デフォルトの名無しさん
06/05/05 18:25:54
M系列乱数と、線形合同法の結果をXORして使えば

M系列が2^127-1の周期で線形合同法が2^32の周期だから 合成周期は掛け算でいいんだよな?

54:デフォルトの名無しさん
06/05/05 19:59:17
>>51
それが厨の厨たる所以。

>>53
ヒント 指数は掛け算が足し算。
つまり合成周期は2^159弱ってこった。

55:デフォルトの名無しさん
06/05/05 20:47:20
M系列乱数と、線形合同法の結果をXORした場合、
簡単に種を見つけるアルゴリズムはあるのだろうか?

56:デフォルトの名無しさん
06/05/06 15:07:25
総当たりが一番簡単だ。

57:デフォルトの名無しさん
06/05/06 18:27:20
>>55の言う「簡単」はそういう意味じゃないと思われ

58:デフォルトの名無しさん
06/05/06 19:05:50
もし総当りしかないのなら暗号に使えないかな

59:デフォルトの名無しさん
06/05/06 19:51:45
ワンタイムパッドとしてなら

60:SOURCE ◆tAo.kQ2STk
06/05/06 20:53:53
>>55
両方の式を満たすような特殊な式があればいくらでも出来そうなキガス。
線形合同法は離散対数とかの扱いが面倒だが?

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

>>58
それは正しいけど、総当り以外に破る方法が存在しない事を証明する事は難しいとオモフ。

61:デフォルトの名無しさん
06/05/07 12:15:43
証明されてなくても多分大丈夫だろうって使われてるのはあるな

62:デフォルトの名無しさん
06/05/07 13:19:27
証明できるくらいまで研究が進む頃には、
総当たりで簡単に種を探せるようなスペックのマシンが動いている気がする。

63:デフォルトの名無しさん
06/05/07 13:38:43
>>62
光の速度を考えると、本当にそんなマシンが出来ると思う?

64:デフォルトの名無しさん
06/05/07 14:34:54
量子論的重ねあわせがどうこう

65:デフォルトの名無しさん
06/05/07 14:44:58
>>64
この場合、全部の組み合わせを検索しなければならないのだとしたら
まず全部の組み合わせをどこかに入れておく必要があるんじゃないの?
そうすると物理的に不可能でしょ

66:デフォルトの名無しさん
06/05/09 00:29:21
>>10
半導体中の熱電子の揺らぎを使った、
熱的乱数発生モジュールを売っているベンチャーもある。
もう数年前の話だけど。

67:デフォルトの名無しさん
06/05/11 00:56:09
>>65
一つの量子に複数の状態を重ね合わせることが出来るので
理論上はあらゆる組み合わせを一箇所に保管できるようになる。
現在の技術では4状態で実験に成功したそうだw 先は長い……

68:1つ、二つ、おっぱい。
06/05/11 22:14:09
> 一つの量子に複数の状態を重ね合わせることが出来るので
 ~~~~~~~~
> 理論上はあらゆる組み合わせを一箇所に保管できるようになる。
       ~~~~~~~~~~~~~ 

後半ダウト。
「複数=あらゆる」って、おまいは大きな数を数えられない未開人ですか?

69:デフォルトの名無しさん
06/05/12 04:36:31
別に間違っていないが。

70:デフォルトの名無しさん
06/05/13 10:13:33
また開き直りか。

71:デフォルトの名無しさん
06/05/14 08:48:58
考える問題において可能なあらゆる状態数がNのとき
一個の量子ビットにN個の状態を重ね合わせる量子アルゴリズムを使うなら
別におかしくないね

72:デフォルトの名無しさん
06/05/14 10:29:03
言い訳乙w

頭悪すぎ

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

ずいぶん貧弱な理論だなwww想像力が足りないというかwww基礎知識がない素人の発言は怖いというかwww

74:デフォルトの名無しさん
06/05/14 10:48:20
というより 
検索が高速だとしても、
1万なら1万通りの状態を一瞬で作る方法があるのか?
あるなら、既にその問題は解けてるわけじゃないのか?


75:71
06/05/14 11:07:33
>>67でも>>69でもないですが、おいらはShorの素因数分解アルゴリズムのことを言ったんだけど

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

一体何の話?

76:71
06/05/14 11:09:49
あ、>>62からの流れだったんですね
すいません

77:デフォルトの名無しさん
06/05/14 11:23:40
>考える問題において可能なあらゆる状態数がNのとき
>一個の量子ビットにN個の状態を重ね合わせる

とか言ってる時点で素人モロバレ

78:71
06/05/14 11:31:16
>>77
あ、ほんとだ
一個のqubitに格納する状態の数はN個じゃなかった
うろ覚えですいません

79:デフォルトの名無しさん
06/05/14 17:12:03
>>66
それって周囲の温度によって乱数変わったりしない?

80:デフォルトの名無しさん
06/05/14 17:13:20
アメリカの暗号乱数発生チップには諜報機関の権限でバックドアが仕掛けられているという話だが…

81:デフォルトの名無しさん
06/05/14 18:25:00
>>18これって普通にソースに組み込んで使ってもライセンスの問題無い?

82:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/16 07:51:37
>>82
よく見ろ、t の初期値は使われてないぞ。

84:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/16 12:12:56
ここには乱数に詳しい人はいない件

86:デフォルトの名無しさん
06/05/16 14:33:23
飯の種だし
こんなところにタダで書くわけにも

87:デフォルトの名無しさん
06/05/16 22:17:00
>>18
乱数全然わからんけど、
y,zはただのキャリアーでx,wの上下32bitを使うのね。
中間の64bitは使わなくてもいいの?
その方が出力が読みにくかったりする?

88:デフォルトの名無しさん
06/05/17 05:19:45
そんな単純な問題じゃない

89:デフォルトの名無しさん
06/05/17 06:36:50
>>87
よく見れ、種として機能している。

90:デフォルトの名無しさん
06/05/17 17:02:00
擬似乱数の種を得る方法には時刻以外にどんなものがある?

91:デフォルトの名無しさん
06/05/17 18:20:51
未初期化変数のゴミ値

92:デフォルトの名無しさん
06/05/17 20:48:26
マウスカーソルの座標

93:デフォルトの名無しさん
06/05/17 20:51:13
俺の場合、セキュリティ関係の用途じゃない時のデフォは[時刻+プロセスID]。
セキュリティ関係の用途の時には >>48

94:デフォルトの名無しさん
06/05/17 21:32:34
サウンドカードからの入力(ノイズ)値

95:デフォルトの名無しさん
06/05/17 22:47:54
>>94
俺DTMやっててフルデジタル環境なのでサウンド入力は常時0になりますが……
もしかして俺の環境だとうまく乱数吐かないソフトあるんかな?

96:デフォルトの名無しさん
06/05/17 23:28:26
>>91
それ、ほとんど毎回同じになるだろ。

97:デフォルトの名無しさん
06/05/18 00:42:15
連続起動時間
CPU稼働率
メモリ使用率
メモリキャッシュ量
HD容量+使用率

98:デフォルトの名無しさん
06/05/18 01:46:47
素直に>>48使おうよ…

99:デフォルトの名無しさん
06/05/18 17:28:17
CryptGenRandomは失敗する環境があるから

100:デフォルトの名無しさん
06/05/18 17:35:53
100

101:デフォルトの名無しさん
06/05/18 18:28:39
>>94
そういやファミコンはアナログ信号ピンがあってカートリッジ側でそいつを読めたんだっけ?
それを乱数に使ったゲームは知らないが。

102:デフォルトの名無しさん
06/05/18 20:56:02
>>99
MSが標準で提供してるサービスプロバイダを選んでちゃんとした初期化をすれば、失敗する環境なんてないだろ?

...俺も、以前はヘタレなコードを書いて環境よっては失敗するからなんでだろう?
と悩んでたけど初期化コードの問題だったぞ。(状態によって初期化方法を変える必要がある。)

103:デフォルトの名無しさん
06/05/18 21:01:00
>>90
そういえば、Z80のアセンブラとかではリフレッシュレジスタ(※)の値を利用するなんて話もあったなぁ。

※昔のメモリシステムの名残で、メモリの内容が揮発しないように定期的にリフレッシュするのに
 使われたレジスタ。どこのメモリブロックをリフレッシュするべきかを指し示して高速にその値が循環する。

104:デフォルトの名無しさん
06/05/18 21:04:34
>>103
>>3

105:デフォルトの名無しさん
06/05/18 21:05:41
>>103
連続起動時間とそうたいして変わらんと思う

106:デフォルトの名無しさん
06/05/18 21:14:18
たしか3ビットだか4ビットぐらいしかなかったような気がする>リフレッシュレジスタ

107:デフォルトの名無しさん
06/05/18 23:11:51
>>106
7ビットだよ。
しかし互換CPUでは全く変化しないこともある罠。

108:デフォルトの名無しさん
06/05/20 18:47:53
ところで、乱数性を評価する方の話はどうなのよ
URLリンク(csrc.nist.gov)
とかさ


109:デフォルトの名無しさん
06/05/20 19:38:12
>>108
俺は乱数を自作したりその乱数性を評価するときにはその評価対象の乱数である程度のサイズの
乱数列を生成しそれをそのままファイルとして保存し、ファイルの圧縮プログラムを使ってその結果
の圧縮率が悪いほどエントロピーが高い良い乱数として評価してる。俺的にはこの方法はお手軽で
且つかなり有効なテストの方法だと思ってるんだけど、ちょっと他人の意見を聞いてみたい。

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

ちなみに俺はこのスレでMTに癖があるって言い出したヤツだけど、
それはこの方法による評価でMTで生成した乱数列の圧縮率がよかったから。

110:デフォルトの名無しさん
06/05/20 21:36:02
おいおい、エントロピーが高いってことはその範囲でのビットの出現回数に
偏りがないって事だろ。
MTほどの長い周期であれば部分的に偏りが生じる区間があるのは当然じゃない。
重要なのはその区間から次の区間を予測できないことな訳だ。
むしろ、いつどの区間を見ても偏りがないのなら短い周期しかもっていないことになる。

高々数MB、数GB程度のサイズじゃ乱数性は測れないよ。
試しに普通の線形合同法で乱数を生成してみれば分かる。
普通に圧縮できないから。
下位ビットは使うなよ。

111:デフォルトの名無しさん
06/05/20 21:48:45
>>110
おまい、ちゃんとわかってる? ちゃんと実測した?

俺はMTの理論に問題があるなんて言ってない。初期化が糞だって言っただけ。
MTでもちゃんとした初期化をすればちゃんと圧縮率が悪くなるのも確認済みだし、
線形合同法なんかだと下位ビット捨てても圧縮率はいいぞ。

112:デフォルトの名無しさん
06/05/20 21:50:44
>>111
> MTでもちゃんとした初期化をすればちゃんと圧縮率が悪くなるのも確認済みだし、
それって、 MT には何にも問題ないってことだよな?

113:デフォルトの名無しさん
06/05/20 22:20:49
圧縮についてなんか知っててそんなこと言ってるのか?
圧縮ソフトが何やってるのか調べた方がいいぞ。

114:デフォルトの名無しさん
06/05/20 22:26:01
>>112
そだよ。だけど、極端な話すると100万回やっても同じ値を吐き続けるとってもあほみたいに周期の長い乱数と
100万回で一週しちゃうんだけどその間のエントロピーは文句なしの乱数のどっちが実用的だと思う?
少なくともあの実装のMTではモンテカルロ法に利用すんのも止めといたほうがいいぞ。

115:デフォルトの名無しさん
06/05/20 22:27:42
>>113
そもそも乱数性の検証に圧縮を利用するのはただのハックに過ぎないことはわかってる。
だからこそ、他人の意見を聞きたい。

116:デフォルトの名無しさん
06/05/21 08:53:55
辞書サイズよりも大きい周期で同じデータを吐き出しても圧縮率は変化しないよね

117:デフォルトの名無しさん
06/05/21 09:25:46
>>116
にも関わらず、MTや線形合同法では圧縮率がいいんですよ。

てか、他の優れた評価方法とかないの?
俺も多少は乱数性の評価方法とか調べたけどあまりにもしょぼいしのか見つからなくてよー
たとえ例えハックにも過ぎなくても、これじゃ圧縮を利用したほうが断然いいじゃん・・・て、今んとこ結論してるわけよ。

118:デフォルトの名無しさん
06/05/21 10:49:31
>>111
>おまい、ちゃんとわかってる? ちゃんと実測した?
実測データキボンヌ

119:デフォルトの名無しさん
06/05/21 14:52:24
>>118
俺も記録をちゃんと残してたわけじゃないから、精確な情報じゃないけど
数十MB規模のデータでMTの場合、だいたい圧縮率が90%代後半で
線形合同法だと圧縮率が80%代後半だった。
ちなみに俺が自作したヤツやMTでも初期化をちゃんとしたヤツだと
圧縮率は100±1%ぐらいだった。

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

# 当然だけど、LZHとZIPではほとんど圧縮率に差がでなかった。

120:デフォルトの名無しさん
06/05/21 15:33:55
他の圧縮やってみたら全然結果が違ったらどうする。

121:デフォルトの名無しさん
06/05/21 15:39:52
>>120
別にどうもしないけど。圧縮アルゴリズムが違えば結果も異なるのは当たり前。
しいて言うなら評価をする為の圧縮アルゴリズムのひとつとして採用するだけ。

122:デフォルトの名無しさん
06/05/21 15:44:50
てか、ちゃんとした知識を持ってて、理論に基づいてどーこー言えるヤツはおらんのか?
俺自身も知識よりは閃きの人間だから、知識のないヤツは黙ってろとかは思わないが、
できれば知識を持ってる人間の意見を聞きたい。

123:デフォルトの名無しさん
06/05/21 15:53:05
断る

124:デフォルトの名無しさん
06/05/21 15:58:02
>>123
そんなこと言わないで、頼むよ~

125:デフォルトの名無しさん
06/05/21 17:11:27
1,2,3,・・・というデータはハフマン圧縮ではまったく圧縮できないがランダム性はない

126:デフォルトの名無しさん
06/05/21 17:32:09
>>125
そこまでテキトーなこと抜かすなよ。
ちょっとバイナリでの表現がどうなるか考えりゃ、圧縮できることぐらいわかんだろ。
せめてもうちゃっと考えてから書き込んでくれ、な?

127:デフォルトの名無しさん
06/05/21 17:51:37
>>126
いや循環し続けるデータなら ハフマンでは圧縮出来ないのは正しいだろ
ただ、差分をとれば途端に圧縮出来るのだが


128:デフォルトの名無しさん
06/05/21 17:58:04
まずはランダム性を定義しろ

129:デフォルトの名無しさん
06/05/21 18:30:55
>>127
理論ベースで言えば確かに >>125 が言わんとすることもわからんでもないが
実装ベースで考えれば >>125 の言う理論は途端に破綻する。
>>125 があげたようなデータを 8bit 表記にすればたかだか256バイトで循環するデータになるし
32bit 表記にすれば上位bitが圧縮可能なデータ群と可す。

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

>>128
ランダム性の定義ではないが、
圧縮アルゴリズムによる評価目的はエントロピーの高さを測ること。

130:デフォルトの名無しさん
06/05/21 18:37:41
>>125
付け加えておくと、それはもっとも簡単な疑似乱数列だぞ。

131:デフォルトの名無しさん
06/05/21 18:43:47
>>129
1,2,3,・・・,2^32までのデータを使えば32bit表記では各ビットパターンは一回ずつ登場する事になるぞ

132:デフォルトの名無しさん
06/05/21 19:15:14
>>131
それでも圧縮は可能だろうが。

やっぱり、こんなとこでまともな意見を求めた俺がバカだったか。
こんなやりとり続けても時間の無駄だしもっと生産的なことに時間をつかうよ。じゃぁな。ノシ

133:デフォルトの名無しさん
06/05/21 19:21:20
>>115
>そもそも乱数性の検証に圧縮を利用するのはただのハックに過ぎないことはわかってる。 
それは唯のハックでは無いだろ?
むしろ、コルモゴロフの定義に忠実すぎるぐらいだ。

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

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

圧縮後のファイルサイズは、いわゆるステップ数なんかよりも、
ずっとよい指標になる。


134:デフォルトの名無しさん
06/05/21 19:30:37
>>133
基準はどれぐらい?
テキストなんでだいたい 20% ぐらいになるのも普通かと思うんだが。

135:デフォルトの名無しさん
06/05/21 19:36:20
ところで、折角 >>108 が NIST の乱数検定器を挙げているのに
その実行結果について議論をするどころか、

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

とかぬかしている件について、どうよ?


136:デフォルトの名無しさん
06/05/21 19:41:20
>>134
むしろ圧縮後のサイズがポイントだな。
圧縮した後のファイルサイズで、
「このアプリは、この程度の規模の複雑さを持っているんだな」
ってのが、意外に分かると思う。


137:デフォルトの名無しさん
06/05/21 20:01:01
>>132
圧縮云々を言うならせめて情報理論ぐらい勉強しろよ・・・

138:デフォルトの名無しさん
06/05/21 20:06:51
>>136
コメントに日記が書かれていても複雑なプログラムなのかw

139:デフォルトの名無しさん
06/05/21 20:33:04
>138
で?何?


140:デフォルトの名無しさん
06/05/21 21:38:44
バカばっか

141:デフォルトの名無しさん
06/05/22 00:21:49
データ列を圧縮してその圧縮率がどう、ってのはシャノン情報量を見てるんだよね?

>>114
>そだよ。だけど、極端な話すると100万回やっても同じ値を吐き続けるとってもあほみたいに周期の長い乱数と
>100万回で一週しちゃうんだけどその間のエントロピーは文句なしの乱数のどっちが実用的だと思う?
確かに。
「100万ビットでも同じ値が続いてくれることがありえないと困る」ような乱数の使用法をしてるか否か、ってことだよね。
ゲーム用途なら下位ビットが最悪のrand()の方が人間相手には『確実にランダムっぽく』見える分有利かもしれないな。
でもそれはつまるところ、人間の持つ「ランダムさ」の感覚が
シャノン情報量の大小と一致していないところに問題があるわけだよね。
だから、マジで何万回も同じ値が出続けるかもしれないサイコロ振りより、例えばM系列の方が喜ばれたりする。
難しいねえ。

142:・∀・)っ-○◎● ◆toBASh....
06/05/22 00:31:35 BE:752619896-#
100万回同じ値を吐くという状況を再現できんのだが、何が問題なのかサパーリ
俺はboost::random::mt19937使ってる

143:デフォルトの名無しさん
06/05/22 00:37:45
>>142
そりゃー32bitの乱数なら100万回同じ値になる確率は1/((2^32)^999999)なんだから
そうそう簡単に再現されるわけ無いじゃん。

144:デフォルトの名無しさん
06/05/22 00:39:24
で、そうそう再現されない状況なんだから、
「はじめっからそんな値を吐かないアルゴリズムでも問題ないよな?」
という考え方で、もっと短周期の乱数アルゴリズムが『実用的』とみなされている。
ってこと。

145:デフォルトの名無しさん
06/05/22 00:42:00
boostのMTはあんまり速度でなかったと思われ。
同じ使うにしても本家サイトで公開されてる「高速化版」に差し替えた方がいいかも。
(乱数生成アルゴリズムを入れ替えできて、同じインターフェースを提供、ってのがboostのいいところだしな)

146:デフォルトの名無しさん
06/05/22 00:43:17
池沼としか思えんw

147:デフォルトの名無しさん
06/05/22 00:46:42
いけぬまで悪かったな! これでも頑張って勉強中の身なんだ……

148:デフォルトの名無しさん
06/05/22 04:08:13
このスレ見てて思ったんだが、乱数がどういうものかっていう理解度が人によってかなりまちまちなんだけど、
理解度が低い側の人が自分自身の理解度が低いということすらが自覚してなさげだね。

最低限↓このページの最初に書かれていることぐらいは理解したうえで議論すべきだと思うけど。
URLリンク(ja.wikipedia.org)

149:デフォルトの名無しさん
06/05/23 18:43:51
「スレが急激に伸びる時は大抵、池沼が書き込んでいる」


150:デフォルトの名無しさん
06/05/23 18:45:47
↓↑
└┘ そうだね

151:デフォルトの名無しさん
06/05/25 21:30:16
また池沼が寄ってきた

152:デフォルトの名無しさん
06/05/25 21:42:01
おかえり池沼くんw

153:デフォルトの名無しさん
06/05/31 02:33:35
なあMTよりもうちょっと周期短くていいからベクトル数すくない乱数ないの?

154:デフォルトの名無しさん
06/05/31 21:39:14
AESやtwofish 等のブロック暗号の結果を使うと、エントロピーという面では良い?
ちなみに、暗号化した結果をさらに暗号化して、次の乱数を出していくような形だと、悪い性質が出てきたりするのかな?

155:デフォルトの名無しさん
06/05/31 22:23:43
それOutput-FeedBackって奴じゃん。

じゃなくって、生成器Aで作った乱数列を鍵にして生成器Bで乱数列を作る、ってこと?

156:デフォルトの名無しさん
06/05/31 22:50:20
XORすべき平文はないけれど、それも OFB って言っていいのかな?
そうであれば、たしかに OFBですね。

157:デフォルトの名無しさん
06/05/31 22:52:01
で、結局、まともなブロック暗号であれば、エントロピー的な意味では、
悪い性質が出てきたりはしない筈…ですかね?

158:デフォルトの名無しさん
06/06/01 00:25:28
>>156
全0の数列とXORして結果を得ていると考えればOFBの一種だな

159:デフォルトの名無しさん
06/06/01 00:26:39
>>157
その「まともな暗号」を考えるのがムツカシイ

160:デフォルトの名無しさん
06/06/01 10:58:08
>>159
154で書いた通り、前提として、AESやtwofishを想定していますけれど。
暗号の世界の死屍累々の歴史を見れば、よほどでなければ俺様暗号を作ろうなんて傲慢な気持ちにはなれないですよね。
AES 選考のときも、ドイツテレコムが採用していた暗号が 10秒で即死したり、笑い話に事欠かない世界…怖いですね。
URLリンク(h2np.net)

161:デフォルトの名無しさん
06/06/01 13:58:02
>>160
ハァハァ 読んでて興奮するね。

162:デフォルトの名無しさん
06/06/03 04:14:33
>>160
カコイイ!!

163:デフォルトの名無しさん
06/06/03 05:16:05
>>160
最終的にAESに選ばれたのはそこで名前すら挙がっていなかったRijndaelだというのも
おもしろいな

164:デフォルトの名無しさん
06/06/05 00:58:00
高速な乱数の基本はシフトとXORを使うことらしいが
この二つってそんなに演算早いの?
加減算やローテートは遅い部類なの?

165:デフォルトの名無しさん
06/06/05 01:32:04
シフトとローテイトはCPUレベルではそんな変わらんと思うが

加減算は変わりそう


166:デフォルトの名無しさん
06/06/05 01:42:13
>>164
命令自体は別に変わらないよ。
M系列でググると分かるけど、
ある周期で全てのビットが0である場合を除いて、
全ての0と1の組み合わせが出現するアルゴリズムがある。
そんでそれはシフトとxorのみで実現する事が出来るというだけ。
これはなかなか自然的な乱数の性質に近くて、
しかもコンピューターに都合のいい形をしている。
で、よく使われる。
加減算やローテートでも実現出来るんじゃないかな。
ただ、周期を大きくするのが難しそうだ。


167:デフォルトの名無しさん
06/06/05 01:53:02
Pen4なら加減算が倍速でローテートはアホみたく遅い。
使用する環境が決まってるならCPUに特化した乱数ルーチンもアリだと思う。

168:デフォルトの名無しさん
06/06/06 17:33:17
>>167
そのために、RCなんとかコンテストで、PowerPC とかがクロックの割に健闘したりってことがあった気が。
そういえば、CPU自体が(熱雑音とかを使った?)乱数生成器を持っているやつって、あるのかな?

169:デフォルトの名無しさん
06/06/06 22:10:12
>>168
ぐぐったら出てきた
URLリンク(journal.mycom.co.jp)

170:デフォルトの名無しさん
06/06/07 10:40:12
こんなのも。どうやって使うのか知らないけれども。
URLリンク(www.intel.co.jp)
インテル 820 チップセットは~インテル(R) ランダム・ナンバ・ジェネレータ(乱数生成器)を搭載しています。

171:デフォルトの名無しさん
06/06/07 20:49:19
メルセンヌ・ツイスタをSSE2で高速に計算する方法を思いついた!!
でも…… ワーキングメモリが2.5倍強ほど必要になってしまう…
ただでさえデカイと評判のMTがさらにでかく…
くそっ、SSEに128ビットアライメント縛りなんてものがなければ……
せめて64ビット縛りならいいのに

172:デフォルトの名無しさん
06/06/07 21:37:59
PCで使うなら気にするこたねぇだろ
組み込みで使うならともかく

173:デフォルトの名無しさん
06/06/07 21:46:05
そだね。
SSE2使おうってCPUならキャッシュで収まるもんね。
気兼ねせず実装することにしますわ。

でもアライメント縛りって本当に鬱陶しいな。スレ違い愚痴スマソ

174:デフォルトの名無しさん
06/06/07 23:20:13
ま、その前提で高速演算できますって機能だから仕方ない。
組み込み系だと日常茶飯事だけどw

175:デフォルトの名無しさん
06/06/11 14:44:38
「とってもごはん」のMMX版MTって、オリジナル版と出力違ってないか?

176:デフォルトの名無しさん
06/06/11 16:49:37
>>171
うpはdvi形式でおk

177:デフォルトの名無しさん
06/06/11 17:06:53
>>175
オリジナルのMTも32bit版と64bit版で出力違うから気にしなくていいと思う

178:デフォルトの名無しさん
06/06/12 06:13:17
で、初期化がどーのこーのに難癖つけてた件は結局うやむやのうちに終了しちゃったの?

179:デフォルトの名無しさん
06/06/12 10:48:14

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

種から生成するアプローチ以外の方法は無いのか?


180:デフォルトの名無しさん
06/06/12 16:50:29
MT-32よりCM-64の方が面白いよ

181:デフォルトの名無しさん
06/06/12 18:19:34
ローランド音源かよw

182:デフォルトの名無しさん
06/06/12 18:21:24
>>178
心配なら暗号論的乱数で初期化汁、そこまで気にしないならどうでもいい、でFA出ちゃったからね。

183:デフォルトの名無しさん
06/06/12 18:57:12
線形合同法で十分

場合によっては

184:デフォルトの名無しさん
06/06/13 00:26:32
いけぬますれ

185:デフォルトの名無しさん
06/06/13 00:48:08
>>184
そんなこと言ってないでなにか話題提供してくれよ

186:デフォルトの名無しさん
06/06/13 03:09:15
擬似乱数について素人ですが、教えて頂けないでしょうか?

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

よろしくお願いします。


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

乱数の話というよりか確率・統計の話だな

188:デフォルトの名無しさん
06/06/13 13:49:37
187さんへ
 ありがとうございます。
 たしかに、1/3-(1/2)**2でも0.288...になりました。
 0.25と思い込んでいました。

189:デフォルトの名無しさん
06/06/14 01:07:11
>>175
それ以前に、メルセンヌツイスタはBSDライセンスのはずなのに
ソースコード中にライセンスについて一切の記述がない事がまずいと思う。
SYN氏、忘れてんのか?

190:デフォルトの名無しさん
06/06/14 01:13:54
そーいや乱数発生器のライセンスってどうなってるんだ。
AESはフリーなんだっけ?

191:デフォルトの名無しさん
06/06/14 05:53:41
yes

192:デフォルトの名無しさん
06/06/14 21:52:44
Rijndaelだけ?他のは?

193:デフォルトの名無しさん
06/06/15 10:46:52
自分で調べろ

194:デフォルトの名無しさん
06/07/08 19:10:20
量子論的乱数発生器ってある?

195:デフォルトの名無しさん
06/07/08 22:27:59
Intelの最近のチップセットには内蔵されてるはず

196:デフォルトの名無しさん
06/07/09 02:16:37
詳細規模んう

197:デフォルトの名無しさん
06/07/09 08:39:00
なんでコンピュータは擬似乱数しか出せないの?

198:デフォルトの名無しさん
06/07/09 09:45:09
真性乱数も出せるだろ、専用のハードウェアがあれば。

199:デフォルトの名無しさん
06/07/09 12:52:06
>>197
決定性チューリングマシンだから。

ところで非決定性なら一様乱数が得られるアルゴリズムがあるのか?

200:デフォルトの名無しさん
06/07/09 14:55:03
>>197
つ /dev/random

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

というか、非決定性チューリングマシンができてしまうと、
今まで暗号論的擬似乱数と呼んでいたものの前提が全て崩れちまうな。
URLリンク(ja.wikipedia.org)

202:デフォルトの名無しさん
06/07/10 01:33:58
>>201
えっと、そんなことはないです、オーダー的に。デタラメ言わないで。

203:201
06/07/10 02:36:50
>>202
え、なんでだ?

非決定性チューリングマシンとはNP完全な問題を多項式時間で解くマシン、
すなわち、単純な総当たりで解くしかない(=解くには指数時間かかる)と思われていた問題を
多項式時間で解いてしまうことのできるマシンであるから、
RC4などストリーム暗号で使われる暗号論的擬似乱数列も多項式時間で解けちゃうでしょ。

204:デフォルトの名無しさん
06/07/10 21:01:48
どうでもいいがWikipediaを参考文献として引き合いに出すのは勘弁してくれw

俺が書いた文章だったりするからwww

205:デフォルトの名無しさん
06/07/10 21:13:30
>>204
嘘書いたの?

206:デフォルトの名無しさん
06/07/11 06:52:21
自分の使ってる狭い専門用語を広めるのには便利かもしれないな。

207:デフォルトの名無しさん
06/07/11 13:35:06
>>109の方法をやってみたら
どの乱数列データもまったく圧縮できないorz

208:デフォルトの名無しさん
06/07/11 18:56:18
>>205
いやそういう意味じゃないが、非常に照れくさい……

209:デフォルトの名無しさん
06/07/19 03:02:36
ま、素人はそう考えるわな。

210:デフォルトの名無しさん
06/07/19 03:07:16
間違ってるけど

211:デフォルトの名無しさん
06/07/19 12:52:58
一様な乱数のお薦めを見繕ってくれ

212:デフォルトの名無しさん
06/07/19 13:08:01
MT

213:デフォルトの名無しさん
06/07/19 18:00:52
C99のrand()関数は「ラグ付きフィボナッチ」だと聞いたけど、
どんなアルゴリズムなの?

214:デフォルトの名無しさん
06/07/19 18:12:33
アルゴリズムまで規定してたっけ??<C99

215:デフォルトの名無しさん
06/07/19 20:30:32
x_i = a * x_(i-p) + b * x_(i-q) (mod M)
狭義のlagged Fibonacciだとa = b = 1.


216:デフォルトの名無しさん
06/08/26 01:43:17
線形合同法と似てない?

217:デフォルトの名無しさん
06/10/08 06:58:26
>>211
一様では乱数とは言わない。
特定の周波数幅に対するホワイトノイズ乱数というのなら可能。
この場合は特徴があるが、目的に使う限り特徴は現れにくい。

218:デフォルトの名無しさん
06/10/08 07:16:59
>>217
フィルタ使わずそんなもん発生する事できるのか
是非教えてくれ

219:デフォルトの名無しさん
06/10/09 18:00:37
ちょークロックの早いPCM合成チップで生成

220:デフォルトの名無しさん
06/10/09 18:54:49
ブラム・ブラム・シャブって乱度高そうだな
シャブ打ってラリってそうな響きだ

221:デフォルトの名無しさん
06/10/09 23:00:54
>>218
例えば想像する対象をサイコロの目としてみる。
1から6まで均等にでる乱数なら可能だろ
その種類だけ格納するテーブルを作って
確立が高い部分か低い部分を再度乱数を求め補正するだけ
原始的な方法で昔から使われている。
記憶容量に依存するが、多重評価することで要求に対するバランスが測定
可能であれば、それを元に補正するだけでいい。
この方法だと周期はでるが、結果として分かっている周期を補正するのは
容易だろう。
任意の偏りがでるかスペクトルを測定し再評価すればいいだけの話だね。

222:デフォルトの名無しさん
06/10/10 00:38:32
統計を取って補正すると、乱数じゃなくなるけど?
時系列で見ると偏ってるからね。

223:デフォルトの名無しさん
06/10/10 00:45:37
もともと偏った確率で目が出る疑似乱数に、統計情報を加えて一様乱数にしようとすると、必ず波が出来るよ。
パチンコやスロット台で波が出来るのもこのせい。

224:デフォルトの名無しさん
06/10/10 01:20:57
>>222
10年間同じ値が続いても乱数。無限に長い時間からすれば確率的には存在する。
そのぐらい理解しておけ

225:デフォルトの名無しさん
06/10/10 01:23:04
>>223
元の擬似乱数にある偏りが表にでただけで偏りがすくないものなら
測定できるような波はでない。
それに波がでたとしてもそれをフィードバックさせるだけで補正は可能。

226:デフォルトの名無しさん
06/10/10 01:25:25
まあ、224と225が別人で、まったく逆の方向を指してるのだけはわかった。

227:222
06/10/10 01:39:12
>>224
統計を取って補正しちゃうと、それが不可能になるって言ってるんだけど?

228:デフォルトの名無しさん
06/10/10 19:31:09
バカな俺に「一様では乱数とは言わない」の意味を教えて下さい。
一様乱数は一様ではないの?

229:デフォルトの名無しさん
06/10/10 19:40:53
URLリンク(ja.wikipedia.org)

230:デフォルトの名無しさん
06/10/10 23:18:00
一応乱数

231:デフォルトの名無しさん
06/10/13 14:21:51
>>228
一様だと周期があるということになるのは理解できない?
一様乱数とは有限の範囲内では周期がないが、それ以上だと
周期がある乱数を言う。
>>224
それは自然乱数の本質だな
>>225
これは正規乱数の類だな。上のwikiに解説してあるからしっかり読んでおけ。


232:228
06/10/13 17:44:49
>>231
>一様だと周期があるということになるのは理解できない?
はい。
「一様であること」とは「偏りがないこと」と理解しています。なので、
>それ以上だと
>周期がある乱数を言う。
「一様であること」と「周期があること」の関係が解らないでいるのです。

233:デフォルトの名無しさん
06/10/14 01:15:08
数学出来なそうなニオイ…

234:デフォルトの名無しさん
06/10/14 02:45:28
横レスで済まんが、俺もわからないんで、デキるあなたが解説してよ>>233
暗号と情報セキュリティのお勉強はしたけど、正直乱数はよくわからん

235:デフォルトの名無しさん
06/10/14 03:09:53
>>231が何言ってるのかは全く不明だけど、

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

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

一様だろうがそうでなかろうが、所詮周期があるという点で
「疑似」乱数でしかないわけだけど、一様性が担保されている
場合は、そうでない(一様かどうか不明な)場合と違って、
周期の終わりの方では次にでる数字を推定しやすくなる。
ギャンブルには使いにくい。

236:デフォルトの名無しさん
06/10/14 08:34:34
普通のrandじゃいけない理由は?

237:デフォルトの名無しさん
06/10/14 09:57:42
>>236 その「理由」を君が知りたい理由は?

238:デフォルトの名無しさん
06/10/14 10:04:34
>>237日本語でおk

239:デフォルトの名無しさん
06/10/14 13:11:10
ところで、
URLリンク(www.optoscience.com)
の真性乱数発生器ってのはホンモノなの?
熱雑音を利用したチップやボードはよく見かけるけど、
量子乱数ってのはあまり見かけないような気がするッス
どういう仕組みになってるんだろうか…

240:デフォルトの名無しさん
06/10/14 13:58:00
周期が終わったら初期化すればいいじゃない

241:デフォルトの名無しさん
06/10/14 14:48:04
>>236
いまどき普通のrandを使う理由は?

242:デフォルトの名無しさん
06/10/14 14:50:22
>>241
いまどきじゃないrandが存在する理由は?

243:デフォルトの名無しさん
06/10/14 17:37:21
>>242
いまどきじゃない方が便利だから

244:デフォルトの名無しさん
06/10/14 17:40:53
便利かどうかで言えば、便利さは「同じ」だと思うな。
重要なのは、目的を達成するための手段として妥当かどうかだよ。

245:デフォルトの名無しさん
06/10/14 23:00:51
少なくとも理不尽さを軽減する効果はある。

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

みたいな。

246:デフォルトの名無しさん
06/10/14 23:20:35
Civシリーズの乱数FAQを思い出すナー

247:デフォルトの名無しさん
06/10/14 23:36:06
メルセンヌ・ツイスタのホームページが存在しないんだけど
作者はもう慶応には居ないってこと?

248:デフォルトの名無しさん
06/10/14 23:45:00
>>247
普通に"MT 乱数"とかでググれば出てくると思うが

249:デフォルトの名無しさん
06/10/16 10:22:55
civの乱数には波がある

250:デフォルトの名無しさん
06/10/16 12:05:45
すいません、昭和初期の国産バスの図面を探しているのですが、
適当な資料をご存じの方がいたら教えてください。

251:228
06/10/16 15:19:19
>>235
>一様性が担保されているなら
…あ、そうか。やっぱ俺はバカでした。
ありがとうございます。ひとつ賢くなりました。

252:デフォルトの名無しさん
06/10/18 17:36:16
>>251
本物?釣り氏?w

253:デフォルトの名無しさん
06/10/18 18:18:59
一様性が担保されていても、長ーい周期の疑似乱数の最初の方だけ
使うんならあまり問題にならないような気がする。

40万組みのシャフルしたトランプから10枚だけ引くとか。

254:デフォルトの名無しさん
06/10/18 20:06:33
ここまでの俺の理解:
(1)周期があるというのは、別に一様にしようがしまいが疑似乱数である限り言えること

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

(3)>>231が前半二行で(1)以外の情報を伝えたかったのかどうかは不明

255:デフォルトの名無しさん
06/10/18 23:53:23
一様乱数の意味を勘違いしてる人が多いな。

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

ソフトウエアで生成する乱数が原理的に真性乱数になり得ないのは
まったく別の話。一様性とは無関係。

256:デフォルトの名無しさん
06/10/19 03:41:58
なるほど、その勘違いした人が大声で解説すると。
悪貨が良貨を駆逐するとはこのことか。


257:デフォルトの名無しさん
06/10/19 04:10:57
>>255
やっぱそうなのか
上の話を読んで
「サイコロを6回ふったら、1から6までの目がどれもぴったり1回出る」
が一様乱数かと思って焦ったよ

258:デフォルトの名無しさん
06/10/19 11:45:46
>>255
疑似乱数の場合、
>確率はすべて等しい。= 一様である。
ものと、そうでないものがある、というのはわかっていますか?


259:デフォルトの名無しさん
06/10/19 12:08:06
なんでこう自分の言いたい内容を明確に書かない臆病者が多いんだろうね?
ム板の特徴なのかな

260:デフォルトの名無しさん
06/10/19 12:16:47
>>255
(有限の)周期があって、かつ一様な疑似乱数の特性について
教えてください。1周期内では各数字は同じ回数だけ現れますか?

261:デフォルトの名無しさん
06/10/19 14:32:38
>>258
なぜ「過去の出目に関係なく」という部分まで引用しない。
重要なところだぞ。
また、間違ってると思ったらどこがどう間違ってるか書いてくれ。

262:デフォルトの名無しさん
06/10/19 23:38:43
一度ギャンブル用のサイコロとかプログラムで作って、現金懸けていわゆる賭博でもしてみれば身にしみてわかるさw

263:デフォルトの名無しさん
06/10/20 11:30:26
基本的に目的に使うものに影響がでない周期にして使えば問題ない。
厳密に一様というのは、愚かな考え。
1つの周波数に対して一様なのは可能だが。

264:デフォルトの名無しさん
06/10/20 22:58:19
>>262
プロと対峙して「てめぇいかさまだな」とか言われた日には。


265:デフォルトの名無しさん
06/10/23 11:35:42
>>264
その日を境に行方不明になると

266:デフォルトの名無しさん
06/10/25 00:15:58
サイコロの目は1から6まで均等にはでない。これが物理現象。
理屈の上の乱数と実際に作れる乱数とは別なことを理解できないとは
愚かだよな。
理屈上のサイコロでも「有限回数」の出目は一様ではない事実、これが何故か
理解できないの池沼に説明しても無駄だから放置だw


267:デフォルトの名無しさん
06/10/25 00:29:16
いや、単に「一様」という言葉を
「どの目も同じ回数出る」と誤解してる人がいて
勘違いしてる人もしてない人も混乱しただけだろ。

268:デフォルトの名無しさん
06/10/25 00:51:09
>>267
どの目でも確率分布を一様にさせると言う事は、出る回数が同じになって行くと言う事じゃないのか?

269:デフォルトの名無しさん
06/10/25 00:56:51
>>268
そうじゃなくてサイコロを600回振ったら100回1が出る
という意味の「同じ回数」。
出目が一様なサイコロを600回振っても1が100回じゃない
ことの方がずっと多い。

270:デフォルトの名無しさん
06/10/25 01:02:53
>>269
100回でも99回でも101回でもいいけど、100回に近くするって事だろ?
99回ならもう一回出そうかな?とか、101回出てたら、もう控えようかな? とか、操作するんだよね?

271:デフォルトの名無しさん
06/10/25 01:03:44
>>268
> どの目でも確率分布を一様にさせると言う事は、出る回数が同じになって行くと言う事じゃないのか?
全然違う。
たとえば、n回サイコロを投げて1の目が出た回数をk1、2の目が出た回数をk2とすれば、
nを大きくしていくと k1/n と k2/n はともに 1/6 に収束していく(大数の法則)が、
|k1-k2|の期待値は大きくなっていくんだよ。

272:デフォルトの名無しさん
06/10/25 01:09:33
>>270
何の話だ?
まず、そういう操作をしたら一様でなくなってしまう。
過去の出目から未来がある程度予測できてしまうから。

で、そういう操作をする乱数の名前は知らない。
確かに、「誤用の一様」の意味はそれかも。
実用性はありそうだが、名前付いてる?

273:デフォルトの名無しさん
06/10/25 01:20:30
>>272
ギャンブルマシンと言われるゲーム機やパチンコ台やスロットの中身

274:デフォルトの名無しさん
06/10/25 14:07:29
サイコロは真性乱数。規則性とかないんだから、いつでも確率で語るしかない。
しかし、初期条件で全て決定される疑似乱数で各出目の出現回数が違ったら、
それは一様でないということなんじゃないの?


>>273
スロやパチはほとんど真性乱数とみて問題無いよ。
現在スロで主流の方法は、数MHzのクロックを16bitのカウンタで数えていて
レバーが叩かれた時にラッチするというもの。
カウンタが1周する周期が0.03秒とかだから、人間がレバーを叩いているかぎり
ほとんど真性乱数といえる。(だからソレノイドでレバーを叩いて狙う方法が存在する)

275:デフォルトの名無しさん
06/10/25 23:49:24
>>254
> (2)一様乱数の場合は、そうでない疑似乱数と比べて
>       周期の終わりに近づくにつれてさらに予測しやすくなる
それは違う。

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

つまり、次にでる数字を推定しやすいのは、その疑似乱数列の周期と分布が
「既知」であり、その周期に対して十分な長さの過去の乱数列を知っている場合だってこと。
その既知の分布の種類は、一様分布でなく二項分布であってもいいわけだ。

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

277:デフォルトの名無しさん
06/10/26 15:11:27
>>275
>それは違う。
中略
>つまり、次にでる数字を推定しやすいのは、その疑似乱数列の周期と分布が
>「既知」であり、その周期に対して十分な長さの過去の乱数列を知っている場合だってこと。

「違う」といいながら同じことを言っているような気がする。

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

>>277
同じことは言ってないだろ。ちゃんと違うよ。
>>254は一様乱数の場合に予測できると書いていて、(←間違い)
>>275は周期と分布が既知の擬似乱数の場合に予測できると書いている。

279:デフォルトの名無しさん
06/10/26 20:38:54
>>254は「周期の終わりの方では」と書いているんだから、
周期の終わりの方を使っていることが解る⇒周期が既知、
が前提なんじゃないのか?分布も「一様」が前提だし。

280:デフォルトの名無しさん
06/10/26 20:58:11
>>279
ああ、そういうことか。
>>254(2)は、一様かつ周期があると言っているが、
これは言葉が矛盾してる。周期があったら一様じゃない。
ていうか擬似乱数は一様にならないだろ。

281:デフォルトの名無しさん
06/10/26 21:28:23
指向性が無ければ一様といえる

282:280
06/10/26 21:34:11
あ、ちょっと勘違いしてたかも。
>>275は周期のある擬似乱数に関して、
分布が既知ならそれが「一様分布でなくても」
予測ができる、と主張してるんだ。

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

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

ということは、>>255も誤解を招く表現だ。
サイコロで次に出る目が過去の出目に関係ない=乱数
サイコロでどの目が出る確率も同じ=一様
擬似乱数に対して一様という言葉を使うかどうかは知らないが、
乱数であるならば既に過去の出目には関係ないので、
過去の出目に関係ないことを言うのに一様を主張する必要はない。

283:デフォルトの名無しさん
06/10/26 21:48:58
はっきり言って俺最強すぎて我慢できない

284:デフォルトの名無しさん
06/10/27 00:38:08
>>282
勘違いしているなら、「あ、ちょっと勘違いしてたかも。」は
常識が無い発言だよなw

285:デフォルトの名無しさん
06/10/27 02:02:26
一様性を検査しなくていいの?

286:デフォルトの名無しさん
06/10/27 02:07:39
>>285
一様性を「証明」する方が重要じゃないの

287:デフォルトの名無しさん
06/10/27 23:14:52
>>254=>>257です
>>254は「この人はこう言いたかったのかな?」と予想して書いたものなんで悪しからず

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

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


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

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

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

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

この二点がとりあえず事実ということでおk?

288:デフォルトの名無しさん
06/10/27 23:15:59
訂正

×疑似乱数は
〇疑似乱数生成器の出力は

289:デフォルトの名無しさん
06/10/28 01:02:27
粘着しているのは極度に短い周期の擬似乱数=ライブラリーに付属しているような
ものを利用して乱数の一様性を補正すれば、乱数ではなくなるように勘違い
しているとかか?
極度に短い擬似乱数ではなく、極度に長い周期の乱数を用いて、目的の
一様性が保たれれば変な癖などでないだろ。元にしている擬似乱数が
貧弱すぎるじゃまいか?


290:デフォルトの名無しさん
06/10/28 08:19:35
>>287
>統計的に値の出現頻度が偏っているときに、それを補正することもある
どういう補正を考えてるの?

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

計算によって異なる確率分布の乱数を作る事はある。
例えば、一様分布の乱数を利用して正規分布の乱数を得る等。

291:デフォルトの名無しさん
06/10/30 01:03:45
有名な同じ値が続かない乱数の作成方法として。
基本の擬似乱数発生から乱数がでる目の数だけ記録
(1から1000なら1000ビット)
同じ値が出た場合は出てないビットがでるまでか、適当な位置から
出ていない数値を検索しそれを乱数とする。
この場合だと1000回の周期があるが1000回中は同じ値がでないように
できる。
1から1000まで同じ確立で発生し、その発生根本は別の擬似乱数など
から流用すればいい。
これは表面上は同じ値が続かないし元の擬似乱数が乱数的であれば
それなりに使える、例えばシャッフル再生などの音楽プレーヤーの
アルゴリズムなどで採用されている例がある。


292:デフォルトの名無しさん
06/10/31 17:45:56
>>291
それがFA?

293:デフォルトの名無しさん
06/10/31 22:32:18
>280
>>>254の勘違いは、一様の意味を>>268のように思っていること。
>実際は>>271の言うように一様でも|k1-k2|の期待値は大きくなっていく。

それは真の乱数の話ではないでしょうか。
このスレでは疑似乱数についてだけ話すようにしないと混乱の元では?
>>更に、>>268のような数列は乱数ではあり得ない。
これも同様。

294:デフォルトの名無しさん
06/10/31 22:41:15
>>291
それは乱数というよりシャフルというかなんというか。

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

どれくらいの大きさの表が必要なのかはよく分からないけど。


295:デフォルトの名無しさん
06/10/31 22:47:13
ループしすぎ

296:デフォルトの名無しさん
06/10/31 23:11:02
>>293
その通りだ。混乱しそうな場合は単に乱数と言わず、
「真の乱数」「擬似乱数」と言った方がいいね。
>>282は真の乱数のつもりで話している。

擬似乱数に対して一様という言葉を使ったら、
単に擬似乱数の周期の中でどの数が出る回数も同じという意味だよな。
1,2,3,4,1,2,3,4,・・・という周期的な擬似乱数(質は最悪だが)も、一様ということになる。
こういう使い方は正しい?

297:デフォルトの名無しさん
06/10/31 23:26:51
>>296
> 1,2,3,4,1,2,3,4,・・・という周期的な擬似乱数(質は最悪だが)
そこまで短い周期の数列を「擬似乱数」と呼ぶのは変だと思う。
「擬似」乱数なんだから、ある程度は真の乱数の代替に使えるくらいの
性質を持ってないと。

だから、ちょっとやそっとじゃ一周できないくらいの長い周期を持っていることは
「擬似乱数」と名乗るための重要なファクターだと思う。

298:デフォルトの名無しさん
06/10/31 23:30:17
>>297
つまり、ある程度乱数っぽい列に対しては
一様乱数という言葉を296の意味で使っていいということ?

299:デフォルトの名無しさん
06/10/31 23:58:37
おまいら、円周率つかえ。

300:デフォルトの名無しさん
06/11/01 00:24:54
円周率やルート2って、真の乱数と言えないような要素ある?
1億桁目までの数字の偏りとかじゃなくて、本質的にわかっている部分で。

301:デフォルトの名無しさん
06/11/01 00:43:21
円周率は、任意の桁までは計算によって求める事が可能。
今まで出た数値が円周率の数値と同じならば、次に出る数値は計算によって算出可能。
この事は、予測可能な事を意味する。
よって乱数ではない。

302:デフォルトの名無しさん
06/11/01 01:37:13
>>301
下手な疑似乱数より周期長くていいぞw

303:300
06/11/01 01:42:15
>>301
> 今まで出た数値が円周率の数値と同じならば、次に出る数値は計算によって算出可能。
円周率に近い別の無理数かもしれない。例えばπ+1/√(10^1000+1)とか。

で、俺が聞きたかったのはそういうことではなくて、
例えば円周率の10^1000+1桁目から10^1000+10^20桁目までの列と、
真性乱数の10^20個の列を与えられたときにある程度の区別が付くか、ということ。
わかりにくくてスマソ。

304:デフォルトの名無しさん
06/11/01 06:39:59
真正な乱数ならどんな数列でも出現する可能性はあるわけで、
数列だけを比較して区別するなんて不可能でしょ。

305:デフォルトの名無しさん
06/11/01 08:08:48
>>304
そんなことはわかっている。
だが、例えば「1の後には2が来やすい」のような傾向があれば
十分な長さの列があればほぼ確実に判定できるだろ。

306:デフォルトの名無しさん
06/11/01 09:02:29
わかっているなら聞くまでもないじゃん。

307:デフォルトの名無しさん
06/11/01 23:39:31
大学教授、円周率を計算し過ぎて逮捕
URLリンク(www.faireal.net)

308:デフォルトの名無しさん
06/11/01 23:53:09
>>307
あのカスラックなら本当に言い出しかねんな

309:デフォルトの名無しさん
06/11/02 00:34:57
>>301
無限に続くものは任意の桁まで計算できない。
理由は、計算するまでに宇宙が終わるw
人類も機械も消える。
愚かだなw

310:デフォルトの名無しさん
06/11/02 00:48:07
「任意の桁はどこにしますか?」
「無限桁目にします」

311:デフォルトの名無しさん
06/11/02 01:07:13
バカだな 宇宙が終わるなんて都市伝説だよ

312:デフォルトの名無しさん
06/11/02 01:47:41
宇宙が意思、知能を持っていて、宇宙自身が算術を可能という説もある。
というのは、ガセ。

313:デフォルトの名無しさん
06/11/02 02:56:59
42

314:デフォルトの名無しさん
06/11/02 03:57:58
42 :デフォルトの名無しさん :2006/05/04(木) 08:51:13 
要するにマンコ 

315:デフォルトの名無しさん
06/11/02 14:23:01
地面は平らだ。丸いわけがない。
象が支えて亀が歩いているんだ。
宇宙があるなんて都市伝説だ。

316:デフォルトの名無しさん
06/11/02 20:25:42
人間なんて居るわけが無い。
これは全部俺の妄想だ、夢だ。

317:デフォルトの名無しさん
06/11/03 04:02:16
>316
お前今「嘘」ってWOP使うの避けたろ

318:デフォルトの名無しさん
06/11/03 12:40:49
何で擬似乱数程度でこれほど燃えるんだよ、馬鹿ばっかりだなw

319:デフォルトの名無しさん
06/11/03 12:57:37
燃えてるように感じてるのは多分お前だけ

320:デフォルトの名無しさん
06/11/04 02:58:27
319みたいなDQNばかりだけど勘弁してやれ>318

321:デフォルトの名無しさん
06/11/04 04:25:47
折角萌えるなら擬人k

322:デフォルトの名無しさん
06/11/06 00:48:31
とうとう煽り愛のスレに成り果てましたか?


323:デフォルトの名無しさん
06/11/10 15:09:58
>>294
短い周期なら乱数だろ?0と1の2種類とかw

324:デフォルトの名無しさん
06/11/10 17:27:29
>>291
最初は[1,n]の乱数で、次は[1,n-1]の乱数…と発生させてその出力を使えば同じこと。

325:デフォルトの名無しさん
06/11/23 11:03:50
で、おまいらがほしい乱数とは、数値が連続せず、どの数値も同じ確立に
なりやすい擬似乱数だろ?
プロセッサのリヤルタイムクロックに同期するようなプログラムはほぼ
困難というか事実上は不可能だろうから
それでも利用すればいいんじゃないか?連続に高速で利用する場合も
考慮して乱数テーブルでも用意してミックスすればよさげ。

326:デフォルトの名無しさん
06/11/23 11:06:39
そんなあなたに
URLリンク(www.t-rs.co.jp)

327:デフォルトの名無しさん
06/11/23 12:08:13
時計もないしメモリの状態も常に一定の環境で
擬似乱数を発生させたいんだけど
不確定要素が無いので種がいつも同じなので
動作が常に一定になってしまい
擬似乱数にならないのです
どうしたらいいのでしょうか?


328:デフォルトの名無しさん
06/11/23 13:45:00
サイコロ振って手入力

329:デフォルトの名無しさん
06/11/23 13:55:21
外部要因で動作・変化する何かがないとムリだっぺ

330:デフォルトの名無しさん
06/11/23 14:10:35
>>327
よく使う手だけど
メモリをちょっと壊す

331:デフォルトの名無しさん
06/11/23 15:13:12
>>327
人間に2回何かさせる。


332:デフォルトの名無しさん
06/11/23 15:15:11
>>327
原理的に不確定要素が必要だから、何とかするしかない。
メモリ状態、ユーザの入力、CPUjの状態、
それでもダメなら種を予め手入力しておく。

333:327
06/11/23 16:19:37
やはり不確定要素が必要なのですね
アドバイスありがとうございました

334:デフォルトの名無しさん
06/11/23 20:23:10
そこでUSBガイガーカウンタですよ。

335:デフォルトの名無しさん
06/11/26 12:39:36
擬似乱数の萌え擬人化希望

336:デフォルトの名無しさん
06/11/26 17:18:11
> メモリの状態も常に一定
ずっとHLTでもしてるのか?

337:デフォルトの名無しさん
06/11/26 18:21:36
>>336
初期値がクリアされているシングルスレッドではないかと・・・
いや、やっぱずっとHLTかな・・・

338:デフォルトの名無しさん
06/11/28 05:08:43
>>332
昔と違ってOSが動いているPCなら普通に不確定要素のタイミングで
動いている。
CPUコアのリヤルタイムクロックとアイドリングで動くカウンター要素
等を組み合わせても不確定要素を簡単に抽出可能だろ。
ワンチップマイコンや電子回路程度では話は変わってくるだろうけどな


339:デフォルトの名無しさん
06/11/28 05:11:25
時計もないしメモリの状態も常に一定の環境

340:デフォルトの名無しさん
06/11/28 08:05:30
リヤルタイム

341:デフォルトの名無しさん
06/11/28 13:50:36
>>334
プーチン政権を批判するロシア人に持たせれば
良質な乱数が作れそうだな。


342:デフォルトの名無しさん
06/11/28 14:57:40
>>341
All1で乱数にならない罠。

343:デフォルトの名無しさん
06/11/29 16:51:41
擬似乱数なんてストリーム暗号の出力使えばいいじゃん

344:デフォルトの名無しさん
06/11/30 12:06:53
マリーアントワネット様キタ

345:デフォルトの名無しさん
06/12/02 22:43:18
>>325
>で、おまいらがほしい乱数とは、数値が連続せず、どの数値も同じ確立に
>なりやすい擬似乱数だろ?

このへんが少し困るところだよな。
人によっては(もしかするとかなり多くの人が)その方がランダムだと
思っちゃうんだよな。
もしサイコロで6が5回位続いたら仕込んであると怪しまれそう。
同じ目が続かない方が乱数としてはおかしいんだけどな。
短周期で目の分布がいつも揃ってたらそれもおかしいし。
52314ときたら次は6だろうみたいな。
人の感じる乱数性は真の乱数性とは違うんだろう。

346:デフォルトの名無しさん
06/12/03 22:06:11
音楽のランダム再生などは、真の乱数性ではなく、
人がランダムと感じることこそが重要だが、
こういう擬似乱数列を得る手法で有名どころとかある?

347:デフォルトの名無しさん
06/12/03 22:46:36
>>346
単なるシャッフル再生じゃダメなのけ?

348:デフォルトの名無しさん
06/12/03 23:13:51
シャッフルといってもいろいろあるべさ。
某MP3プレーヤのシャッフルリピートは同じ曲を3回繰り返したし、
某なんとかシャッフルのシャッフルリピートは同じ曲を一回おきに3回繰り返した。

349:347
06/12/03 23:41:42
ランダム再生とシャッフル再生を区別しているプレイヤーもあるな。

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

この分類だと、>348のようなことはランダム再生だと起こりうるが、
シャッフル再生だと起こらない。

350:デフォルトの名無しさん
06/12/03 23:54:15
>>347
言われてみればそうだな。連続出現の心配はなくなるわけだ。
あとで思い出したが、同じアルバムの曲が10曲中3曲もあるから
ランダムじゃないと感じることもある。
まあこれもバラし方を考えればいいだけで、
乱数の発生方法とは関係ない話だったな。

351:デフォルトの名無しさん
06/12/04 11:10:31
>>346
>>324みたいな乱数列を作ればいい訳で

352:デフォルトの名無しさん
06/12/05 13:57:14
>>345
擬似乱数なんだから乱数を元にしたシャッフルで問題ないだろ。
現実のサイコロにしても目の数の周期性はあるわけだし。
※理論的なサイコロではない。
単に乱数に拘るのは周期が短いライブラリーなどにある乱数関数を使うと
規則性が表面に出て見えることがある。
この点であると思う。真の乱数であるなばら規則性が目立っても
それは一時的(数年続いても無限からすれば極短期間)な挙動であって
乱数である。
何かの規則で一様性な分布がほしいのであれば「無限級数」等を使えば
言い訳で、人間から見て一様乱数にみえるのはシャッフルがもっとも
近いものじゃないか?

353:デフォルトの名無しさん
06/12/05 18:28:56
>>352
ぐだぐだな日本語に気持ち悪くなってくる。

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

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

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

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

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

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

>人間から見て一様乱数にみえるのはシャッフルがもっとも
>近いものじゃないか?
人がどう見るかなんて、その人によるとしか言えない。
一巡するまで同じものが出ないものは一様乱数にみえないって人もいるだろう。

354:デフォルトの名無しさん
06/12/06 00:16:44
ところで↓こういうネタがあるんだが、どう思う?
URLリンク(bugfix.jp)

355:デフォルトの名無しさん
06/12/06 10:33:38
>>353
釣り氏?

356:287
06/12/06 15:34:10
>>290

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

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

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

私もそう思う(そういう定義しか知らない)ので・・・

357:デフォルトの名無しさん
06/12/08 23:57:04
>>356
ここは擬似乱数のところだから、真の乱数、つまり論理的な真の乱数を
言うのならそれなりの説明が必要とおもわれる。
実際に必要とされるのは真の乱数ではなく、擬似乱数であり
擬似乱数にはいろいろ種類があり、用途別に話しを展開しなければ
無意味な議論じゃないのか?

358:デフォルトの名無しさん
07/01/06 20:21:25
ほしゅ

359:デフォルトの名無しさん
07/01/31 23:01:07
>>330
しょ、詳細を…

360:デフォルトの名無しさん
07/02/01 22:52:43
>>359
カオスのバタフライ現象を簡易化した形を使うのが簡易です。
シフトとビット操作で比較的簡単に作れる。
放送大学で具体的手法まで解説していたよ。
全体を均一にしたい場合はCDプレイヤーなどで
使われるシャッフルのアルゴリズムが一番簡易です。
0~999の間なら1000ビットのRAMが最低必要になりますが。

361:デフォルトの名無しさん
07/02/02 08:09:20
CDプレイヤのシャッフルと言うと、実装方法によってばらつきがまちまちということですか?
#中には同じ曲が連続しやがるCDプレイヤも一回置きに繰り返すCDプレイヤもあるのだが。

362:デフォルトの名無しさん
07/02/02 08:46:34
それはシャッフル再生ではなくてランダム再生?

363:デフォルトの名無しさん
07/02/02 09:17:28
シャッフル再生と言い張りつつ>361のようなのはあるね。iPodShuffleも所謂シャッフルじゃないし。

364:デフォルトの名無しさん
07/02/02 16:31:17
Winampは完全なオプションでシャッフルから完全なランダムまで変化の度合いを設定できるんだよな
Morph Rateとか名づけてたっけ

365:デフォルトの名無しさん
07/02/02 16:32:05
すまん1行目訂正

Winampはオプションで完全なシャッフルから完全なランダムまで変化の度合いを

366:デフォルトの名無しさん
07/02/02 22:52:08
>>361
シャッフルを正しく実装しているものは同じ曲をバラバラにすべての曲を
1回づつ再生する機能のこと。
ランダム再生をしているのにシャッフルと名前を付けている
のは単に誤訳か、まがい物じゃないか?
URLリンク(e-words.jp)

367:デフォルトの名無しさん
07/02/02 22:54:16
公取委かJAROに訴えればいいのそれ?

368:デフォルトの名無しさん
07/02/02 23:50:08
>>366
iPodShuffule訴えてくれ。

369:デフォルトの名無しさん
07/02/03 22:08:43
>>368>>367
アップルに騙されたオマイがDQN


370:デフォルトの名無しさん
07/02/11 10:15:46
最も単純で低精度な擬似乱数の作り方てどこかにない?

371:デフォルトの名無しさん
07/02/11 10:25:27
どんなアルゴリズムでも擬似乱数と言い張れば、それは擬似乱数

372:デフォルトの名無しさん
07/02/11 10:53:43
>370
URLリンク(ja.wikipedia.org)擬似乱数

373:デフォルトの名無しさん
07/02/11 11:21:27
もっとも単純なわけでも低精度なわけでもないが
地球上でもっとも虐げられている擬似乱数アルゴリズムは
やっぱ線形合同法なんじゃね?

374:デフォルトの名無しさん
07/02/11 18:07:28
>>370
5かけて1足してffでマスク

375:デフォルトの名無しさん
07/02/14 06:24:21
>>370
擬似バタフライ効果があれば何でもいいんじゃない?


376:デフォルトの名無しさん
07/03/06 15:47:49
>>370
常に定数を返す擬似乱数がもっとも周期が短い。
これより周期の短い擬似乱数はない。

377:デフォルトの名無しさん
07/03/06 22:46:09
何も返さない擬似乱数

378:デフォルトの名無しさん
07/03/07 07:58:43
何も返さない擬似乱数は周期が短いとは言えない。
何も返さない擬似乱数は分布が偏っているとは言えない。
何も返さない擬似乱数は擬似乱数テストプログラムをテストするために使えない。
370の目的はたぶん最後のコレ。

379:デフォルトの名無しさん
07/03/07 20:58:47
>>376
定数ってだけじゃなく1bitであるべき(どうしても int にするなら 0 or -1)だろうな。
そうじゃないとbit単位のストリームとして見たときにbit数分の周期が存在することになる。

380:デフォルトの名無しさん
07/03/08 08:13:45
うむ、0と1の分布という点からも0か-1であるべきだな。
そして、0超過状態からの脱出という観点からは0であるべきだな。

381:171
07/04/10 04:02:15
いつのまにやらSIMD対応ほかいろいろ改良してるモノが出てるな。
まあ俺が以前いってたSIMD対応はメモリ上の並びをパズルみたいにコチョコチョいじるだけで
メモリ使用量も増やさず意外と簡単にできたんだが、
それ以外の改良となると、やっぱじっくり研究しないといかんわな。
悔しいが現役の学生にはかなわん。これは認めておいて、
とりあえずコード読んで高速化の余地を探すとするか。

382:デフォルトの名無しさん
07/04/10 04:26:31
どっちの乱数の方が優れているか判定をおしえろ

383:382(乱数の精度判定)
07/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;}

384:382 改良版
07/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);}

385:382
07/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秒


386:CryptGenRandomはいまいち
07/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:デフォルトの名無しさん
07/04/10 12:22:01
コード直貼りもいいが、うpろだを活用してくれ

388:デフォルトの名無しさん
07/04/11 01:36:14
ム板的にはwikiのが良くね?

389:デフォルトの名無しさん
07/04/11 02:34:04
疑似乱に周期があるから、パイで検定するときは、1000回、10000回、と増やして
いって近似がパイに近づかなくなる回数を調べる事も重要

390:デフォルトの名無しさん
07/04/11 16:34:53
擬似乱数のことを擬似乱と略す人間は初めて見た

391:デフォルトの名無しさん
07/04/11 21:27:44
>>386
この精度がいいと(あるいは悪いと)どういう乱数ってことになるの?
あと、なんで win_rand() だけ 1 bit 捨ててんの?

392:デフォルトの名無しさん
07/04/16 16:57:12
>>391
円周率は、3.1415である
正方形(サイズは40000とする)の内部にランダムに
点を4万回打てば、それに内接する円の内部に点が打たれる回数は
31415回程度になる
試行回数を増やせば増やすほど円周率にちかずく
ここで乱数の生成が均等であるほど近くなる

393:デフォルトの名無しさん
07/04/16 20:00:37
このスレは共立版 knuth の3巻を読んでる事を前提にしていいんですよね?

394:デフォルトの名無しさん
07/04/16 20:59:09
>>392
㌧。

win_rand() で 1 bit 捨ててんのはなんで?

395:デフォルトの名無しさん
07/04/16 21:15:24
捨てないと符号関係のエラーがでるんだが

396:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/16 22:10:39
>>393
共立じゃなくてサイエンス社

398:デフォルトの名無しさん
07/04/16 22:12:25
boost::random::mersenne_twisterはだめなん?

399:デフォルトの名無しさん
07/04/17 01:51:37
ダメじゃないよ。
というか実質的には最強。
とりあえずwikiでも読んでみなよ。

400:デフォルトの名無しさん
07/04/17 07:06:41
もっとすごいのあるよ
SIMD-oriented Fast Mersenne Twister (SFMT):
URLリンク(www.math.sci.hiroshima-u.ac.jp)


401:デフォルトの名無しさん
07/04/17 19:30:13
WELLの登場で次世代の擬似乱数は混沌とするかと思ったが、
これでしばらくMTの系譜が続くのは確定だな

402:デフォルトの名無しさん
07/04/17 22:40:44
周期長っ!

403:デフォルトの名無しさん
07/04/18 00:14:07
速っ
URLリンク(www.math.sci.hiroshima-u.ac.jp)


404:デフォルトの名無しさん
07/04/18 10:51:22
boost::random::mersenne_twister「メモリぱくぱく おいちい^^^^」

405:デフォルトの名無しさん
07/04/19 20:33:08
>>402
>>404
だからSFMTでは短周期版も作ったんじゃないか

406:デフォルトの名無しさん
07/07/04 20:56:27
SFMTのboost対応版マダー?

407:デフォルトの名無しさん
07/07/08 00:18:50
Twister 系の擬似乱数て
単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。
適度に内部ビット数増やせば、周期なんて測定不能な域にするのは容易じゃん。
ワンチップとかの超小型マイコンで作るんじゃないんだし、今のPCなら
乱数で使うメモリは捨てるほどあるわけだしな。


408:デフォルトの名無しさん
07/07/08 00:29:35
>単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。
それを実装したことに意味があるんじゃん。
…って開発者が言ってた。

409:デフォルトの名無しさん
07/07/09 23:43:55
>>408
似た事を主張した奴とか類似物を作ったやつも、正式に論文発表しなかった
だけにすぎない。

410:デフォルトの名無しさん
07/07/10 09:47:42
コロンブスなんて西に航海しただけ。コロンブスがしなくても誰かがやったよね。

411:デフォルトの名無しさん
07/07/10 09:52:53
コロンブスってタダの方向音痴なんじゃないかと思う


412:デフォルトの名無しさん
07/07/10 10:22:53
「西に向かえば地球は丸いそうだからアジアに辿り着ける筈だ」と言う発想は方向音痴とはいえまい。

413:デフォルトの名無しさん
07/07/10 13:30:58
西に向かって最初に見つけた陸地を西インド諸島と名付けるのはどうか。
せめて西ジパング諸島と呼ぶべきだったと思う。

414:デフォルトの名無しさん
07/07/10 15:29:18
コロンブス以前に原始人が海をわったったという遺伝子が原住民の
遺伝子確認で分かっている点について(ry


415:デフォルトの名無しさん
07/07/10 20:29:40
同時代に同じことを考えた香具師はいっぱいいる
コロンブスチームのマーケティングの勝利

416:デフォルトの名無しさん
07/07/10 20:40:37
このビルのガラス窓は頑丈だと証明しようと体当たりしてぶち破って死んだ弁護士もいたな

417:デフォルトの名無しさん
07/07/11 01:10:25
>>416
荒縄静香を思い出した

確かWeb魚拓は取っといたはずだけど どこいっちゃたtかな

418:デフォルトの名無しさん
07/07/11 01:16:28
【総連】「安倍一味には負けない」総連弾圧に対して措置取る…朝鮮外務省代弁人声明
スレリンク(news4plus板)l50

419:・∀・)っ-○◎●
07/07/11 01:22:51
>>406
斉藤君に連絡とってみるかな。
個人的にはSSE2非対応CPU向けにMMX版くらいは欲しいんだが。

本人が動いてくれるくれないにかかわらず、SSE2版だけならVC8/ICC用の
クラスを作ってみようと思うが。どうせ俺が使うし。

420:デフォルトの名無しさん
07/07/11 01:28:04
で、SCEからオファーはきたの?



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch