10/01/09 12:02:20
>>228
こういう用途なら、単純に1次元化して、正規乱数を利用すればいいんじゃないの?
233:デフォルトの名無しさん
10/01/09 12:35:43
それじゃ速度が出ないだろ
というかそれでいいなら質問してこないだろ
234:デフォルトの名無しさん
10/01/09 12:38:29
その前にその正規乱数はどこから持ってくるのかと小一時間(ry
235:デフォルトの名無しさん
10/01/09 23:20:47
>アナログテレビの砂嵐状態のように、全画素を毎フレームノイズで埋め尽したいと考えています。
あれ、ほんとに相関なしなん?>詳しい人
なんか、いいセルオートマトンとかありそうじゃない?
236:デフォルトの名無しさん
10/01/10 00:55:27
砂嵐状態っていっても度合いがあるからね。
元の信号が強く混ざってれば文字通り目に見えて分かるし。
砂嵐(スノーノイズ)の原因は熱雑音らしいから
S/Nが十分に悪ければ(笑)ほぼ相関なしといえると思う。
熱雑音はランダムか?という問題は話が別ね。
そっちは量子論の問題だから。
何か法則があるかも知れないしないかも知れないけど
とりあえず理論的に確認できる方法がないので(観測問題)
そこのところは考えないでおこうってのが今の主流。
どちらであっても今のところ結果は統計的な予測と一致している。
ので今のところ統計的に熱雑音はランダムと言えるっぽい。
そもそもランダム・不規則ってなんだ?ってのも哲学っぽくて難しい問題だ。
熱雑音も本当は原子の状態(擬似乱数でいう状態空間)を完全に知ることが出来れば
その後の振る舞いを予測することが出来るはずなんだけど(決定論)
前の状態と次の状態を同時に知ることが出来ない(観測問題)。
観測者の有無に関係なく次の状態は決まっていると考えたのはアインシュタインで
(神はサイコロを振らない)この説は今は少数派。
果たして観測者が次の状態に影響を与えた結果は如何に?
ところで仮に完全に熱雑音の振る舞いを表現することが出来たとして
それをもし理論的に解析できたとしたらその結果はランダムだろうか?
周期も分布も分かってる既存の擬似乱数の方が良かったらどうだろう?
今までに我々がランダムと呼んでいたものの正体は…?
237:デフォルトの名無しさん
10/01/10 03:21:02
仕組みが分かったところで、解を出すためには初期条件が必要
シードを与えて一意な結果を出すのは一般的な乱数と同じものだろ
238:デフォルトの名無しさん
10/01/10 03:26:41
>>237
何の話?
239:デフォルトの名無しさん
10/01/10 04:32:49
物理量を離散的に捉えるのは根本的に違ってるぞ
240:デフォルトの名無しさん
10/01/10 05:36:42
サンプリングすればおk
241:デフォルトの名無しさん
10/01/10 19:07:32
DOOM をソフトウェアラスタライズしていた頃と比べれば、リアルタイム程度なら CPU で mt やって充分間に合いそうな気がする。
こういう大量生成が対象なら、前に Cell スレで盛り上がってたコンテストの最適化がフィットすると思う。
そんで別の種でマルチスレッドでクアッドコアで、って感じでどうだろう。
242:デフォルトの名無しさん
10/01/11 03:25:51
プリレンダした砂嵐テクスチャ並べて適当に描画すれば?
243:デフォルトの名無しさん
10/01/11 09:28:59
>>242
それは正しい処理だが、スレタイを翌嫁。
244:デフォルトの名無しさん
10/01/11 16:31:10
>>242,243
それだとテクスチャが沢山必要になるからi/oで引っかかって
擬似乱数より遅くなるよ
245:デフォルトの名無しさん
10/01/11 20:19:14
二次写像などのカオスの数値の下ビットを使うというのはどうだろう
でも実際に相関がないことを証明する必要があると面倒ですね。
plot(rand mod 640,rand mod 400,rand mod 16)
とかでとびとび直線が出てびっくりですよ
246:デフォルトの名無しさん
10/01/11 20:48:42
>>245
数理的な意味でのカオスってのは、テント写像に代表されるように
小数点以下を無限に汲みだす漸化式になっているから予測が難しいのであって、
種が有限桁数であっては成立しない。
むしろ、いかなる相関性のある入力に対しても、
周期は短くていいから高速に前ビットかき回して相関のない出力を出す関数があればいい気がする。
247:デフォルトの名無しさん
10/01/11 20:48:48
こんなことを言い出すやつがいるとは…
それは線形合(ry
このスレは分かってる人とそうでない人のレベル差が妙に大きいな
248:デフォルトの名無しさん
10/01/11 20:57:18
>むしろ、いかなる相関性のある入力に対しても、
>周期は短くていいから高速に前ビットかき回して相関のない出力を出す関数があればいい気がする。
いいわけない、というかそれはただのハッシュ
等確率性・分布・周期を保証できないし
入力がずっと同じだったらどうにもならん
249:デフォルトの名無しさん
10/01/11 21:02:21
>>248
アンカが抜けてた
>228の
> 落としどころとしてはMTとか周期の長い乱数を使って
> 一定フレーム毎に各画素の状態を更新してしまえばいいと思うよ。
に対して、それなら各画素で回す周期は短くていいんじゃないかなと。
等確率性と分布は証明or検証する必要性があるとして。
250:デフォルトの名無しさん
10/01/11 21:36:24
>>246
頭悪そうな意見だな。周期が短い時点で相関性アリまくりだろうが。
↓こういう馬鹿(道化師)がいたことを思い出す。
【危険】とんでもプログラム告発スレッド【悪質】
スレリンク(tech板)
1 名前:デフォルトの名無しさん[] 投稿日:2007/10/09(火) 01:15:16
劣悪なプログラムやアルゴリズムを、恰も優れたものだと言い張り、
他人を騙しているサイトを告発、検証、監視することを目的としたスレッドです。
単純に技量不足だったり、稚拙であるもの、下らないものは対象としません。
第一弾として、
道化師氏のサイト(URLリンク(www.trickpalace.net))の
疑似乱数アルゴリズム「無相関性擬似乱数アルゴリズム-prime spiral-」
URLリンク(www.trickpalace.net)
を紹介します。このアルゴリズムおよび作者の言動の問題点は以下のとおり。
・MT(Mersenne Twister)がダメだと主張しながら、具体的な問題点は指摘できていない。
・MTより劣悪な乱数を生成しながら、MTより優れていると主張する。
・周期がたったの2^32のしかない(線形合同法と同レベル)
・無駄にテーブル参照するため遅い(線形合同法より劣悪)
・優れていると主張しながら、言葉の定義と評価基準を示すことはしない。
・indexと最低限の出力系列(各素数の和)が得られると、初期ベクトルが逆算ができてしまう。
・最低限の出力系列で、全パターンに出現する値の分布が確定する。
indexが確定すれば出現順まで確定するほど相関性が非常に高く劣悪。
・出ない値が確定するという点で乱数とはもはや呼べない。
・作者は暗号用途にも使えるつもりでいる。MTより「良い」乱数だと宣伝しているが、
実際は周期、分布などの点で低品質。信じて使うとろくなことにならない。
アルゴリズムの問題点や作者の人間性が明らかになる過程はこちらのスレで読めます。
擬似乱数
スレリンク(tech板)
251:デフォルトの名無しさん
10/01/12 01:04:22
これは過去ログ見てみたかったな
まあ乱数弄ってりゃそのうち巡り会うこともあろう
252:デフォルトの名無しさん
10/01/12 01:25:44
>>426が言いたいのはハッシュ関数かと思われ
253:デフォルトの名無しさん
10/01/12 03:31:52
>>251
過去ログ(1146071975.dat)うpしたね
URLリンク(www.dotup.org)
よかたら見るね
254:デフォルトの名無しさん
10/01/12 11:59:26
>>226
ホワイトノイズ(一様分布)じゃなくてブルーノイズでも良いなら方法はある。
ブルーノイズはホワイトノイズの低周波成分を除いたもの。
ホワイトノイズではモアレのような模様が見えるがブルーノイズでは模様は見えない。
255:デフォルトの名無しさん
10/01/12 16:02:33
乱数をjpegなどのデコーダーに食べさせるって言うのはどうだろうか
256:デフォルトの名無しさん
10/01/13 01:01:39
>>253
頂きました!
どうもありがとう~
俺,週末になったらこれ読むんだ…
257:241
10/01/13 05:15:25
試してみたが、VC++2008EE の /O2 でコンパイルした MEXP=216091 の sfmt の gen_rand32() で
1920x1200 を 30 枚埋めるのに、2003年の CPU P4 2.6C で 600ms 弱くらい。
今なら余裕じゃない?
258:デフォルトの名無しさん
10/09/14 17:15:16
DIEHARDテストはp-valueが一つでも p < .025 or p> .975が
あると失格なのでしょうか?
>>148のは13個あるのに合格って書いてありますけど。
359行 - 0.97978
391行 - 0.01013
533行 - 0.9948
541行 - 0.9988
543行 - 0.9825
569行 - 0.0003
602行 - 0.0243
610行 - 0.9907
612行 - 0.0049
672行 - 0.985720
687行 - 0.007759
692行 - 0.987352
857行 - 0.009586
13個
259:デフォルトの名無しさん
10/09/30 05:03:43
擬似乱数についてまとめた本とかってあります?
260:デフォルトの名無しさん
10/09/30 05:07:25
URLリンク(sky.geocities.jp)
作ってみました。
261:デフォルトの名無しさん
10/09/30 05:13:08
g・r・s!
262:デフォルトの名無しさん
10/09/30 09:22:33
>>259 ちょっと内容が古いけど「乱数」という本がある。
あと定番としてはTAOCP2巻。
263:デフォルトの名無しさん
10/10/01 01:32:20
grsって何?
264:デフォルトの名無しさん
10/10/01 02:15:37
ggrks
265:デフォルトの名無しさん
10/10/01 07:52:17
乱数生成generalized reed solomon(GRS)
コンパイルしてみてください。あらさがしもOK。
266:デフォルトの名無しさん
10/10/01 12:22:27
>>265
$ gcc grs.c -o ggg
grs.c: In function `main':
grs.c:614: error: `__m128i' undeclared (first use in this function)
grs.c:614: error: (Each undeclared identifier is reported only once
grs.c:614: error: for each function it appears in.)
grs.c:614: error: syntax error before ')' token
grs.c:615: error: syntax error before ')' token
267:デフォルトの名無しさん
10/10/01 12:26:55
インデントぐちゃぐちゃだわ、場所によってコーディングスタイル違うわで気持ち悪いソースだな
268:デフォルトの名無しさん
10/10/01 17:22:01
C:\cygwin>gcc -O2 -ftree-vectorize -ftree-vectorizer-verbose=5 -msse2 -o hash ha
sh.c
269:デフォルトの名無しさん
10/10/01 17:23:29
C:\cygwin>gcc -O2 -ftree-vectorize -ftree-vectorizer-verbose=5 -msse2 -o grs grs.c
270:デフォルトの名無しさん
10/10/01 18:26:44
gcc tmp.c -I/usr/local/include -L/usr/local/lib -lgmp -o tmp -O2
271:デフォルトの名無しさん
10/10/21 22:32:31
著作権の表記無しで使える優秀な疑似乱数生成アルゴリズムある?
272:デフォルトの名無しさん
10/10/22 09:44:29
アルゴリズムに著作権はないから
273:デフォルトの名無しさん
10/10/22 10:15:00
つまり、「著作権表記なしで使える実装」のある、「優秀な擬似乱数生成アルゴリズム」を所望しているのかな。
んなもん、自分で実装すれば選び放題だ。
274:デフォルトの名無しさん
10/10/22 23:22:08
例えばメルセンヌツイスタはBSDライセンスだけど
コードを参考にして自分で実装すればBSDライセンスに従う必要は無いってこと?
275:デフォルトの名無しさん
10/10/22 23:34:49
パクリ度による
276:デフォルトの名無しさん
10/10/23 08:59:29
メルセンヌ・ツイスターの性能に勝るとも劣らない優れたもの??らしい。
URLリンク(ayusya.hp.infoseek.co.jp)
277:デフォルトの名無しさん
10/10/23 09:51:07
XORSHIFTにちょっと似てる?
いずれにしろ、高次元での相関や周期について、なんの数理的保証もないので
(MTはどちらも数理的に保証している)比較対象になんないよ。
当人は2次元の分布の見た目で評価して同等とか言ってるけど。
278:デフォルトの名無しさん
10/10/23 12:52:34
ISAAC
URLリンク(burtleburtle.net)
WELL
URLリンク(www.iro.umontreal.ca)
KISS
URLリンク(www.math.niu.edu)
こんなとこかな。
279:デフォルトの名無しさん
10/10/23 19:50:35
>>276
最初の
0x65AC9365UL >> ( r & 3 )
とか、シフトの回数の方が動的なのがちょっと新鮮だった。
280:デフォルトの名無しさん
10/10/23 20:43:04
ちょっと乱数が欲しいというときの物としてなら受け入れられるだろうに、
MTと比較してと書かれるとイタいだけだな。
281:デフォルトの名無しさん
10/10/23 21:29:25
このアルゴリズムで同一値が2回連続して出現する事なんてあるのか?
282:デフォルトの名無しさん
10/10/23 22:13:45
0 が出ないんじゃないか
283:デフォルトの名無しさん
10/10/24 01:27:04
周期が55898とか出てるんだけど、なんか間違ってる?
0x65AC9360ULにしたら長くなったけど…
284:デフォルトの名無しさん
10/10/24 02:29:14
周期が明示されていない、または、作者もわからないような擬似乱数はゴミだろ。
あと、同じ値が連続して出ないようなものは、いくら一次分布が均一に見えても乱数として使えない。
285:デフォルトの名無しさん
10/10/24 07:41:43
線形合同法なんか、まさしくその「同じ値が連続して出ない」乱数なんだが。
誕生日検定に通らないわけだけどね。
286:デフォルトの名無しさん
10/10/24 07:44:47
同じ値が連続して出たらその瞬間から値の変化しない乱数に
287:デフォルトの名無しさん
10/10/24 08:28:08
ていうか、周期性があるものは、連続して内部的に同じ値(状態)をとるわけがない。
単に、特定の部分(bit)を取り出しているから、その部分では同じ値に見えるというだけ。
線形合同法を使っていても、例えば32bit中14bitを用いるのであれば
同じ値の連続は起こる。
288:デフォルトの名無しさん
10/10/24 08:58:30
所詮は有限個の整数の集合を同じサイズの整数集合に写像する関数だから、
内部的に2度続けて同じ状態をとるとしたら、その後は永久にその値になるからな。
物理乱数でもなければ窓を使うことで、その精度での乱数性を確保しているというだけだし。
MTはM系列系統だから有限個の整数を一つずつ漏れなくたどり、
一周した場合に一様分布であることはほぼ自明だが、
相関性についてはどうだったろう?
統計的に検定はしてるけど、なにがしかの証明はされてたっけ?
289:デフォルトの名無しさん
10/10/24 16:41:50
検索してみたら、乱数の誕生日検定について、情報がネットには全く存在してないでやんのw
「誕生日のパラドックス」が乱数列として期待される通りに成り立つかどうかの検定ね。
確かKnuthの本には書いてあった。
290:デフォルトの名無しさん
10/11/06 22:40:38
別スレで聞いたのですがこちらに誘導されたので質問します。
メルセンヌツイスタを使って0~(n-1)までの乱数を作りたいのですが、
これだとダメって言われたんですがどこを直せばいいのでしょうか。
INT value;
do {value=genrand_int31()%n;}
while(value>=0x0fffffff-value%n);
291:,,・´∀`・,,)っ-○○○
10/11/06 23:03:00
いろいろひどいからエスパーしていい?
要件:
1.genrand_int31()の剰余をとる
2.分布を完全に均等化するために剰余をとる前の値がNの倍数通りになるように再実行する
んで、
#define INT31_MAX 0x7FFFFFFF // ←ここ重要
int value;
do { value = genrand_int31();
} while (value >= INT31_MAX - (INT31_MAX % n));
value %= n;
MTは下位ビットをとっても安全な疑似乱数だからどっちでもいい
292:デフォルトの名無しさん
10/11/06 23:19:31
>>291
ありがとうございます。
31ビットは0x0fffffffだと勘違いしてました。
293:デフォルトの名無しさん
10/11/06 23:29:53
勘違いの問題点はそこじゃないと思うw
294:デフォルトの名無しさん
10/11/07 12:16:05
もう終わったのかもしれんが
>>291
value = genrand_int31();
これはマイナスの値が返って来る可能性があるから
value = genrand_int31() & 0x7FFFFFFF;
にするべきじゃなかろか
295:デフォルトの名無しさん
10/11/07 13:42:16
int31なのに負の値が帰ってくるの?
296:デフォルトの名無しさん
10/11/07 13:45:36
名前で判断してはいけない
297:,,・´∀`・,,)っ-○○○
10/11/07 15:15:37
MTのソースってこんな感じじゃなかったか?最近読んでないけど。
int genrand_int31() { return genrand_int32() & 0x7FFFFFFF; }
298:,,・´∀`・,,)っ-○○○
10/11/07 15:17:20
自己解決
/* generates a random number on [0,0x7fffffff]-interval */
long genrand_int31(void)
{
return (long)(genrand_int32()>>1);
}
299:デフォルトの名無しさん
10/11/07 16:30:25
ほうほう
300:,,・´∀`・,,)っ-○○○
10/11/07 16:39:17
より厳密に言えば右シフトが論理になるか算術になるかはCの規格上は未定義だったりするのね
unsignedなら論理シフトになるってのはある程度のCPUでは共通してるだけの話
301:デフォルトの名無しさん
10/11/07 16:50:17
なんてこった
302:デフォルトの名無しさん
10/11/07 19:45:33
逆だろ。
Cの規格では、
unsignedの右シフト
及び、
signed型であっても保持している値が正である時の右シフト
これはいずれも論理シフトになることが決まってるんじゃなかったか。
303:,,・´∀`・,,)っ-○○○
10/11/07 19:58:33
規格書落としてきた。
失礼、unsignedの場合は論理シフトで保証されるんだね。
304:デフォルトの名無しさん
10/11/07 20:03:17
この辺かな
URLリンク(flash-gordon.me.uk)
The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1
has an unsigned type or if E1 has a signed type and a nonnegative
value, the value of the result is the integral part of the quotient of
E1 divided by the quantity, 2 raised to the power E2 . If E1 has a
signed type and a negative value, the resulting value is
implementation-defined.
305:デフォルトの名無しさん
10/11/08 10:40:27
よかった、ほっとした
306:デフォルトの名無しさん
10/11/08 12:09:17
そりゃunsignedなのに上から1が降ってきたら誰だってビビるわ
307:デフォルトの名無しさん
10/11/08 12:14:17
算術シフトしかないCPUで、シフト演算はのんきに全部その命令を生成しちゃう
コンパイラだってあるかもしれんし、Cの仕様はそれすらimplementation-definedと
言っていそうな雰囲気がある。この場合は違ったわけだが。
308:デフォルトの名無しさん
10/11/12 23:22:51
たまにはキャリーさんのことも思い出してあげて
309:デフォルトの名無しさん
10/11/13 09:26:39
キャリーをさがせ
310:デフォルトの名無しさん
11/01/18 01:52:26
NIST検査について質問です。乱数の統計的性質を調べるソフトなのですが、
このテストをすべて合格しないと乱数とは言えないのでしょうか?
特にFFT検査の場合に不合格になります。周期はないと思うのですが、なぜか
うまくいきません。それとも、これだけは絶対に通らなくてはいけないという
検査があるのでしょうか。どなたかご教示願います。
311:デフォルトの名無しさん
11/01/19 01:13:06
テストに合格しようがしまいが乱数は乱数じゃね?
312:デフォルトの名無しさん
11/01/19 01:42:36
二回(以上)続けて同じ数字が出ないものは乱数と呼びたくないな
313:デフォルトの名無しさん
11/01/19 09:31:42
>>312
>>284-288
314:デフォルトの名無しさん
11/01/19 16:52:17
疑似乱数に詳しくない俺が言うべきじゃないのかもしれないけど
乱数と疑似乱数を分けて考えてない人が居るような気がするんだ。
乱数、たとえばサイコロとかで作った乱数なら2回以上続けて6が出ることもあるでしょ。
でも線形合同法とかの疑似乱数は、同じ数が2回続けて出ることはないし、
循環しちゃうし乱数とは別物じゃない。だから、疑似と真の区別をはっきりさせないと
話がかみ合わなくなる気がするんだ。
315:デフォルトの名無しさん
11/01/19 17:03:32
本当にわかってないな
316:デフォルトの名無しさん
11/01/19 17:14:01
一気に糞スレ化したね。
317:デフォルトの名無しさん
11/01/19 17:53:20
>>315
何処がどう分かってないのかハッキリさせないと、その発言に意味はないと思いますよ。
意味のない発言の塊が2chなわけですけど
318:デフォルトの名無しさん
11/01/19 17:55:41
314は巨大な状態空間の一部だけ切り出してる擬似乱数が想像できないんだろ
319:デフォルトの名無しさん
11/01/19 18:20:58
>>317
>>313
320:デフォルトの名無しさん
11/01/19 18:39:02
>>318
そういうのは自分で考えさせないと
321:314
11/01/19 19:16:42
>>318、320
よく分からないんですが、疑似と真乱数を分けて考える必要はないということですか?
322:デフォルトの名無しさん
11/01/20 00:03:34
何故区別する必要があると思ったの?
問題の出てくる例を挙げて欲しい。
323:デフォルトの名無しさん
11/01/20 00:15:30
えさを与えないでください
324:314
11/01/20 01:23:19
>>322
そもそもこの2つは別物なのにその2つを同じ言葉で表すのが気持ち悪いと感じるんですよ。
>>310は疑似乱数のテストについて質問していて、>>311、312は真乱数を前提に
話してるみたいだし、>>313は疑似乱数を前提に発言してる。どうも疑似と真を分けてないから
話が噛合ってないように見えるんですよ
325:デフォルトの名無しさん
11/01/20 01:54:43
スルーしてください
326:デフォルトの名無しさん
11/01/20 05:00:53
スレタイも読めないヤツに何かが分かるなんて期待するヤツはいない。
327:デフォルトの名無しさん
11/01/20 17:55:54
わざと答えをはぐらかしてるみたい
328:デフォルトの名無しさん
11/01/20 18:03:55
324は正しい
329:デフォルトの名無しさん
11/01/20 18:06:56
乙です
330:デフォルトの名無しさん
11/04/16 11:03:07.44
George Marsaglia (1924 - 2011)
URLリンク(www.legacy.com)
331:デフォルトの名無しさん
11/04/16 11:16:55.91
age
332:デフォルトの名無しさん
11/05/18 23:19:05.17
乱数で数値nの約数の合計って使えないの?
結構バラバラなんだけど
333:デフォルトの名無しさん
11/05/18 23:21:48.27
とりあえず検定の結果を示してもらわんとなんとも。
それで線形合同法の推奨されてるパラメータを越える成績ならともかく。
334:デフォルトの名無しさん
11/05/18 23:58:05.10
数値nをどこから持ってくるのか詳しく聞かせてもらおうじゃないか
335:デフォルトの名無しさん
11/05/19 16:36:50.88
ぶっちゃけそこはn=n+(秒針)みたいなでいいと思う
あとn/2/(nの約数の合計)なら多分1~0しかでない
336:デフォルトの名無しさん
11/06/12 19:32:33.48
RDRANDで疑似乱数オワタ?
337:デフォルトの名無しさん
11/06/12 21:41:33.09
>>336
URLリンク(software.intel.com)
>8.6
>RDRAND returns random numbers that are supplied by a cryptographically secure,
>deterministic random bit generator (DRBG). The DRBG is designed to meet the NIST
>SP 800-90 standard. The DRBG is re-seeded frequently from a on-chip non-deterministic
>entropy source to guarantee data returned by RDRAND is statistically
>uniform, non-periodic and non-deterministic.
超訳:
RDRAND 命令は、暗号論的に安全である**決定的な**ランダムビット生成器(DRBG)により供給される乱数を返す。
DRBG は NIST SP 800-90 URLリンク(csrc.nist.gov) に適合するように設計されている。
DRBG はチップに内蔵されている非決定的なエントロピー源により、定期的に初期値を再与されているため、
その結果、RDRAND命令は統計的に均一かつ非周期的、非決定的なデータを生成することが保証されている。
オンチップ-エントロピー源の出来如何に関わるという印象を受けますが、さて、どうでしょうか?
338:デフォルトの名無しさん
11/06/12 22:06:24.66
なんで擬似乱数が終わるんだよ?
分からない奴は黙っとけ
339:デフォルトの名無しさん
11/06/12 22:08:35.00
容易に再現できる乱数列が必要な応用があるとか全く知らないんだろ
340:デフォルトの名無しさん
11/06/16 00:25:21.98
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREAD 8
void *th_main(void *arg){
unsigned i, sum = 0;
for(i = 0; i < 1000; i++) sum += rand();
printf("Thread#%d: sum = %u\n", pthread_self(), sum);
}
int main(){
int i;
pthread_t th[NUM_THREAD];
srand(time(NULL));
for(i = 0; i < NUM_THREAD; i++) pthread_create(&th[i], NULL, th_main, NULL);
for(i = 0; i < NUM_THREAD; i++) pthread_join(th[i], NULL);
return 0;
}
rand()ってスレッドごとに独立した系列の乱数列返すの?
既出だったらすいません。
環境はcygwin+gccです。
341:デフォルトの名無しさん
11/06/16 13:48:55.52
そもそもrandがスレッドセーフである保証がない。
スレッドセーフでない関数の読み出しにはロックをかけろ。
疑似乱数の実装がスレッドローカルならスレッドIDとタイムスタンプを組み合わせてseedに使うかな
342:デフォルトの名無しさん
11/06/16 21:37:26.52
>>340
rand_r()は実装されてないの?
シミュレーションとかに使うなら、当然もっとまともな乱数使うべきなんだけど
343:デフォルトの名無しさん
11/06/16 22:04:02.90
randってアルゴリズムからして処理系依存だから
ドキュメント読むしかないと思うが
344:天使 ◆uL5esZLBSE
11/07/03 19:51:40.73
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな
ゴミは何いってもゴミ
345:デフォルトの名無しさん
11/07/03 20:36:04.58
おや知らないうちに、MTの周期の短い奴が
346:デフォルトの名無しさん
11/07/03 21:16:56.21
内部ベクトルぽ周期がxorshift128に似てるね
テストしてみるか
347:デフォルトの名無しさん
11/07/18 01:12:26.71
初カキコというか質問があるんですが
348:デフォルトの名無しさん
11/07/18 01:23:00.97
うーん…
XorShiftでいいや。
349:デフォルトの名無しさん
11/07/18 01:27:26.98
パワフルプロ野球スレでcupsを256にすれば天才選手(低確率で出る初期能力が強い選手)が出ると聞きました
乱数のことはよくわからないんですがそのcupsという項目があって
それを256に合わせればいいという認識でよろしいんでしょうか
それがあってるとして、
乱数は数値化しないとそれにあわせることはできないのでしょうか
もしくは数字だけが分かっていればなんとかなるものですか?
350:デフォルトの名無しさん
11/07/18 01:28:07.97
すいません…ageてしましました…
351:デフォルトの名無しさん
11/07/18 01:35:15.25
ゲームの話は板違い
352:デフォルトの名無しさん
11/07/18 01:37:58.95
>>351
しゅません、ここしか見つからなくて…
353:デフォルトの名無しさん
11/07/25 07:45:02.26
>>348
URLリンク(raluck.exblog.jp)
354:デフォルトの名無しさん
11/07/25 19:27:51.78
乱数の「精度」って記述初めて見たぞ?言いたいことは判らなくも無いが。
355:デフォルトの名無しさん
11/07/25 19:32:37.26
普通、品質って言うわな。
シードとサンプルの長さと、どのような検定で、どういう風に結果が悪いのか、
定量的なことが書いてあれば一読に値すると思うが、これではわけわからん。
356:デフォルトの名無しさん
11/07/25 19:37:41.28
ゲームに使うとかいろいろな種を試したとか
乱数の事なんか何にも分かってないんだろう
悪いけどそんな個人ブログなんか読む価値ないよ
357:デフォルトの名無しさん
11/07/25 19:37:53.89
つーかウィキペディアのXorShiftの記事にも「精度」って言葉が使ってある。
誰だよほんとにもう。
358:デフォルトの名無しさん
11/07/26 12:24:34.03
URLリンク(ja.wikipedia.org)
> 2011年7月25日 (月) 22:05 MetaNest (会話 | 投稿記録) (1,890バイト)
> (疑似乱数列の評価として「精度」なんて形容を使うのは聞いたことがない)
自分が聞いたことがないから間違っている、
という理由で編集する前に他の記事を確認してください。
URLリンク(www.google.co.jp)
「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。
つまり品質の一部分ですね。
359:デフォルトの名無しさん
11/07/26 12:37:39.46
それはwikipediaのノート内で議論すべきでは
360:デフォルトの名無しさん
11/07/26 19:22:02.57
漏れは精度っていうのは誤差の大小だと思っていた。
361:デフォルトの名無しさん
11/07/26 19:28:23.63
一体何の誤差なのか
362:デフォルトの名無しさん
11/07/26 20:21:03.30
理想的な分散から外れる誤差というのはあるんじゃね
363:ななし。
11/07/27 14:04:51.54
カ オ ス ラ ウ ン ジ ゆ る せ な ぁ い ー
364:デフォルトの名無しさん
11/07/27 16:02:15.11
the art of computer programinngの2巻の証明の行間が開きすぎだったから
細部まで証明しましたが何か?
365:デフォルトの名無しさん
11/07/27 22:37:01.04
頭いいね!
366:デフォルトの名無しさん
11/08/02 16:16:05.44
擬似乱数の偏りってビットごとの偏りとか周期性もちゃんと見たほうがいいと思うんだけどねえ。
乱雑性検定の一覧とか出したほうがいいんじゃないの
367:デフォルトの名無しさん
11/08/02 16:42:04.28
まさにそれをやってるのがdiehard testsじゃないの
368:デフォルトの名無しさん
11/08/02 19:08:01.33
その、「ビットごとの」は「周期性」にもかかってる?
ていうか現代的な生成法で特定のビット位置のみ変な特性があるとかまず考えられないように思うけど。
線形合同法ぐらいだと下の桁はダメダメだが。
369:デフォルトの名無しさん
11/08/02 19:15:45.81
>「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。
これ、初期値によっちゃ10個ぐらい0が続いてもどうする?
370:デフォルトの名無しさん
11/08/02 19:17:27.23
>>367
そうなんだけど>353の人にお勧めしたい。
ちゃんとした統計を取る気があるが知らないだけのようなので。
>>368
両方。ビットの周期性も、全体としての周期性も。
線形合同法を意識して書いたからその通りですね。
371:デフォルトの名無しさん
11/08/02 19:45:25.22
> どのくらいのビット数で示される範囲で乱数になっているかという意味
数式で書いてくれ、で終わりだろこんな文
372:デフォルトの名無しさん
11/08/03 04:39:55.82
それより問題は>>348がTinyMTを試した結果なぜXorshiftを選択したかだな
373:デフォルトの名無しさん
11/08/03 19:21:14.73
内部ベクトルって見て楽しいのかね
374:デフォルトの名無しさん
11/08/03 19:57:03.18
見て楽しいかどうかは人それぞれ 4ビットでシフトレジスタ
URLリンク(upload.wikimedia.org)
375:デフォルトの名無しさん
11/08/04 00:13:01.69
楽しくなければ乱数じゃない!
376:デフォルトの名無しさん
11/08/04 09:30:26.00
グレイコードってやつだな。
377:デフォルトの名無しさん
11/08/04 10:37:52.94
グレイコードは1度にハミング距離が1しか変化しないコードだろ
378:デフォルトの名無しさん
11/08/04 10:48:53.38
なんだ・・・ただ1づつ足していくだけかクダラネ。
379:デフォルトの名無しさん
11/08/04 12:02:14.43
ハミング距離も知らんのか
380:デフォルトの名無しさん
11/08/04 12:20:06.08
すごいすごいすごい
ハミング距離を知っているなんて凄いねーー
エライネー
天才だね~
381:デフォルトの名無しさん
11/08/04 19:22:19.62
いやあそれほどでも(クィッ!
382:デフォルトの名無しさん
11/08/26 11:30:52.08
復帰
383:デフォルトの名無しさん
11/11/07 00:15:56.56
擬似乱数ではないのでスレ違いかもしれないが
ちょっとコンセプトを思いついたので実装してみた。
URLリンク(netrand-test.appspot.com)
384:デフォルトの名無しさん
11/11/07 00:34:50.29
何に使うんだそれは
385:デフォルトの名無しさん
11/11/07 07:01:49.82
/dev/random のような用途?
386:デフォルトの名無しさん
11/11/23 11:19:10.85
なんか加減算だけでそれっぽいのができたぜ
URLリンク(www42.atwiki.jp)
387:デフォルトの名無しさん
11/11/23 22:49:37.46
>>386
SFMTに対して、どこがアドバンテージあるの?
周期2^216091-1とかだぞ。
388:デフォルトの名無しさん
11/11/23 22:57:01.60
出力範囲が1000(10ビット未満)というのもな
32ビット精度必要なら4個を組にして使うわけだが,その上での一様性も相当疑わしい
389:デフォルトの名無しさん
11/11/24 08:38:35.87
出現回数をカウントできるようにしたぜ
390:デフォルトの名無しさん
11/12/09 20:48:49.64
お知識拝借
次のような擬似乱数生成方法を探しております
シード(頻繁には変化しない入力値)のほかにいくつかの入力値(頻繁に変化、1,2,3など近い値が入力される)
があって、それら入力値を入れると必ず決まった擬似乱数を生成する、というような乱数生成方法
当初XorShiftをアレンジすれば出来ると思ったのですが、シード以外の入力値が近いと
結果返ってくる値も近いようなものしか出来ず使えませんでした。
こういったタイプの擬似乱数関数として良好なものはありますでしょうか
もしくはどういった風にXorShiftを改造すればこういったものが実現できそうでしょうか
乱文失礼、お力添えお願い申し上げます
391:デフォルトの名無しさん
11/12/10 01:02:45.31
要するにハッシュ関数的な要素が欲しいんでしょ
入力値のハミング距離が近くても出力値のハミング距離が遠くなるように
ハッシュ関数通せばいいよ
392:デフォルトの名無しさん
11/12/10 01:04:32.98
ハッシュ関数、初耳ですがちょっと調べてみます
393:デフォルトの名無しさん
11/12/10 01:13:57.92
毎回srandしてるようにも読めるな
そうでないなら適当に読み捨てれば?
394:デフォルトの名無しさん
11/12/10 01:37:08.54
>>390
どれぐらい「近いようなもの」でなければよいのか、
はっきりしてもらわないと何ともならんのじゃないか?
395:デフォルトの名無しさん
11/12/10 01:39:31.04
ハッシュ関数知らないレベルだから改善の余地は大いにありそうだが
396:デフォルトの名無しさん
11/12/10 02:29:28.25
>>393
お恥ずかしながらおそらくそれをしていました
>>394
32bitですねfloat精度程度
入力値もfloat3つ程度、シェーダーでノイズを作るような目的です
だから欲しいのは
ulong32 Noise(ulong32 x,ulong32 y,ulong32 z,ulong32 seed)
で当初XorShiftの4つにこれを当てはめて数回振っていましたが
どうも模様が見えてしまう結果になります
ハミング距離が遠くなるようなハッシュ関数考えてみます
397:デフォルトの名無しさん
11/12/10 02:45:34.85
典型的にはZobrist Hashingが使える
398:デフォルトの名無しさん
11/12/11 08:35:49.22
他の人たちは 390 が何をしたいか分かったの?
もっとちゃんと問題を定義したらズバリの答えが出る気がするけど。
>>396
余計なお世話かもしれないが、単精度浮動小数点数の乱数を作るのは
(rand() & 0x7fffff) | 0x3f800000
として [1.0 .. 2.0) を作り、必要に応じて線形変換するのが常道。
バイアス部分にも乱数のビットを埋めるのは好ましくない。
で、もし本当に 32bits 必要なら、単精度じゃなくて倍精度を選ぶべきかもしれない。
> どうも模様が見えてしまう結果になります
これが周期の問題なのだとしたら、余計なことしないで単にメルセンヌツイスターを使うだけの方が乱数性も処理速度も好ましいものになるだろう。
399:デフォルトの名無しさん
11/12/11 08:58:54.46
>>396
低周波成分(いわゆる模様)の無いノイズが欲しいなら
それは乱数ではなく、乱数から低周波成分を除く加工をして作る数列
ブルーノイズとか
400:デフォルトの名無しさん
11/12/12 19:02:48.17
>>398
>(rand() & 0x7fffff) | 0x3f800000
>として [1.0 .. 2.0) を作り、必要に応じて線形変換するのが常道。
これは知らなかった。
rand() / (RAND_MAX_1)とばかり。
401:デフォルトの名無しさん
11/12/12 19:13:08.54
fmul一回分だけお得と
まあ大抵は再度後から掛けるだろうけど
402:デフォルトの名無しさん
11/12/14 20:11:28.68
9bit損するからじゃね?
403:デフォルトの名無しさん
11/12/21 14:23:42.69
音のノイズなら線形合同のほうがいいよ
偏りや周期を聞き分ける人がいたら神だよ
404:デフォルトの名無しさん
11/12/24 15:01:03.98
上位ビット使うんだぞ
405:デフォルトの名無しさん
11/12/24 18:33:56.26
気をつけます。
406:デフォルトの名無しさん
11/12/25 00:38:03.89
>>403
ダイナミックレンジ広いと偏りはわからんが、周期は聞こえるぞ
407:デフォルトの名無しさん
11/12/25 10:38:56.24
線形合同法でノイズ作ったぜ
URLリンク(www42.atwiki.jp)
408:デフォルトの名無しさん
11/12/30 00:08:06.52
もうJKISS32でいいんじゃないか。周期も2^121くらいあるみたいだし。
URLリンク(www.cs.ucl.ac.uk)
/* Implementation of a 32-bit KISS generator which uses no multiply instructions */
static unsigned int x=123456789,y=234567891,z=345678912,w=456789123,c=0;
unsigned int JKISS32()
{
int t;
y ^= (y<<5); y ^= (y>>7); y ^= (y<<22);
t = z+w+c; z = w; c = t < 0; w = t&2147483647;
x += 1411392427;
return x + y + w;
}
409:デフォルトの名無しさん
11/12/30 16:57:53.03
129ビットぶんの状態があるように見えるけど周期は2^121なのか
加算の使い方がまたなんとも
410:デフォルトの名無しさん
12/01/02 18:16:00.13
L・C・G!L・C・G!
411:デフォルトの名無しさん
12/07/24 08:00:03.47
wikipediaにある
'特定の範囲で乱数を求めたいときにはa = rand() % 10とする方法も広く知られているが、線形合同法などの下位ビットの乱数としての品質が低い生成法に備えるため上記のコード例のような上位にあるビットを利用するコードが推奨されている'
ってどいういうこと?
(int)((rand() / ((double)RAND_MAX+1.0)) * 2);
と
rand()%2
で1000000回、乱数を生成して比較してみたけど、平均値と0.5の差はどちらもオーダー的にほとんど変わらないのだけど、
412:デフォルトの名無しさん
12/07/24 08:24:36.56
面倒だから
乱数 下位ビット
でググってもらっていいかな。
413:デフォルトの名無しさん
12/07/24 08:26:01.03
>>411
品質が悪いと、奇数偶数が交互にしか出なかったりする。
414:デフォルトの名無しさん
12/07/24 09:00:13.60
>>412
よく分からなかったけど、メルセンヌツイスターとかでも%で余りを求めるやり方はいけないの?
それとも線形合同法に限った問題なん?
415:デフォルトの名無しさん
12/07/24 09:04:24.07
MTはかまわないよ
だめなのは質の悪い乱数に限った話
線形合同法はその代表格
416:デフォルトの名無しさん
12/07/24 15:07:40.15
%は法の数が大きいと分布の偏りが大きくなる。
417:デフォルトの名無しさん
12/07/24 16:50:20.82
>>411
酷い実験してるなw
頼むからブログとかでどっちも変わりませんでしたとか書かないでくれよww
418:デフォルトの名無しさん
12/07/24 17:06:19.28
>>416
それって RAND_MAX が 16 だとして、rnd % 10 とかで計算したら、って話?
そりゃ普通は、はみ出る部分の値が出たら捨てるだろ。
419:デフォルトの名無しさん
12/07/24 17:57:44.60
>>418
普通の知能の持ち主が剰余を使うならそうだが、剰余を使うほとんどの連中はそんなことはしないだろう
420:デフォルトの名無しさん
12/07/24 19:19:37.18
法(のり)
421: ◆QZaw55cn4c
12/07/24 20:14:18.94
>>414
今は線形合同法といっても、計算で仕様するビット全部ではなく、上位の一部を表に返す、とかするものもあるようだ。
URLリンク(en.wikipedia.org)
422:デフォルトの名無しさん
12/07/25 06:50:57.92
線形合同法は比較的単純な弱点が多いから、使う側が完全に把握して使うべきであって、
ライブラリ側でそういう配慮をするのはよくない(そういう配慮をして、ブラックボックス的に
使わせるなら他の生成法にすべき)。
423:デフォルトの名無しさん
12/07/30 22:53:54.77
久々に見たらスレが進んでいるなと思ったら
>>411
> 1000000回、乱数を生成して比較してみたけど、平均値と0.5の差はどちらもオーダー的にほとんど変わらないのだけど
これは本当にひどい
高校生でさえ鋭い奴は問題に気が付くレベル
424:デフォルトの名無しさん
12/08/01 07:50:35.33
>>413
それを定量的に調べる方法はありますか?
425:デフォルトの名無しさん
12/08/01 08:14:03.90
>>424
URLリンク(csrc.nist.gov)
426:デフォルトの名無しさん
12/08/03 08:40:44.06
メルセンヌ・ツイスタでseedはどうやって与えれば良いの?
427:デフォルトの名無しさん
12/08/03 08:47:28.71
初期化関数の引数にシードを与えればいいよ。
428:デフォルトの名無しさん
12/08/03 09:07:33.39
それやってみたのですが、最初の方は似たような数字になってしまいます。
429:デフォルトの名無しさん
12/08/03 09:17:44.87
内部状態が2kバイト強あるから、先頭から4kバイト弱ぶんぐらい読み飛ばす。
あと、十分な量のseedを与えることができるインタフェースが用意されてないか、確認する。
430:デフォルトの名無しさん
12/08/03 09:22:52.54
>>428
それ、小さいシードで初期化するときの実装が古いやつなんじゃないか?
431:デフォルトの名無しさん
12/08/03 09:27:16.85
何万個か読み捨てればいいよ。
432:デフォルトの名無しさん
12/10/01 07:40:42.45
Perlでメルセンヌツイスタをつかえますか?
433:デフォルトの名無しさん
12/10/01 09:10:34.08
うん
434:デフォルトの名無しさん
12/11/20 11:52:42.11
rand(0)とrand(1)どちらも同じ乱数列を生成するのですが、
そのように決まっているのですか?
それともたまたま使っている処理系が、0と1で同じ乱数列を吐き出すのですか?
435:デフォルトの名無しさん
12/11/20 12:10:19.47
rand()って引数いらんのでは?
説明めんどいからsrandも調べてみ
色々わかるから
ちなみにrand()は精度低い乱数
436:デフォルトの名無しさん
12/11/20 12:36:34.27
>>434
お使いの処理系のマニュアルをご覧ください。
つーか、言語も何も判らんのに答えられるわけないとは思わないもんなのだろうか。
437:デフォルトの名無しさん
12/11/20 13:27:08.91
回答もランダムです
438:デフォルトの名無しさん
12/11/22 12:27:29.80
MATLABやRならrandはメルセンヌツイスタになってるよw
439:デフォルトの名無しさん
13/01/07 21:11:37.12
>>429だな。
少なくともオフィシャルの実装には配列でシードを与える関数がある。