疑似乱数2

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

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

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


SIMD-oriented Fast Mersenne Twister (SFMT):
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
2010/10/24(日) 16:41:50
検索してみたら、乱数の誕生日検定について、情報がネットには全く存在してないでやんのw
「誕生日のパラドックス」が乱数列として期待される通りに成り立つかどうかの検定ね。
確かKnuthの本には書いてあった。
2010/11/06(土) 22:40:38
別スレで聞いたのですがこちらに誘導されたので質問します。
メルセンヌツイスタを使って0〜(n-1)までの乱数を作りたいのですが、
これだとダメって言われたんですがどこを直せばいいのでしょうか。
INT value;
do {value=genrand_int31()%n;}
while(value>=0x0fffffff-value%n);
291,,・´∀`・,,)っ-○○○
垢版 |
2010/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は下位ビットをとっても安全な疑似乱数だからどっちでもいい
2010/11/06(土) 23:19:31
>>291
ありがとうございます。
31ビットは0x0fffffffだと勘違いしてました。
2010/11/06(土) 23:29:53
勘違いの問題点はそこじゃないと思うw
2010/11/07(日) 12:16:05
もう終わったのかもしれんが
>>291
value = genrand_int31();
これはマイナスの値が返って来る可能性があるから
value = genrand_int31() & 0x7FFFFFFF;
にするべきじゃなかろか
2010/11/07(日) 13:42:16
int31なのに負の値が帰ってくるの?
2010/11/07(日) 13:45:36
名前で判断してはいけない
2010/11/07(日) 15:15:37
MTのソースってこんな感じじゃなかったか?最近読んでないけど。

int genrand_int31() { return genrand_int32() & 0x7FFFFFFF; }
2010/11/07(日) 15:17:20
自己解決

/* generates a random number on [0,0x7fffffff]-interval */
long genrand_int31(void)
{
return (long)(genrand_int32()>>1);
}

2010/11/07(日) 16:30:25
ほうほう
2010/11/07(日) 16:39:17
より厳密に言えば右シフトが論理になるか算術になるかはCの規格上は未定義だったりするのね
unsignedなら論理シフトになるってのはある程度のCPUでは共通してるだけの話
2010/11/07(日) 16:50:17
なんてこった
2010/11/07(日) 19:45:33
逆だろ。

Cの規格では、
unsignedの右シフト
及び、
signed型であっても保持している値が正である時の右シフト
これはいずれも論理シフトになることが決まってるんじゃなかったか。
2010/11/07(日) 19:58:33
規格書落としてきた。
失礼、unsignedの場合は論理シフトで保証されるんだね。
2010/11/07(日) 20:03:17
この辺かな
ttp://flash-gordon.me.uk/ansi.c.txt

   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.
2010/11/08(月) 10:40:27
よかった、ほっとした
2010/11/08(月) 12:09:17
そりゃunsignedなのに上から1が降ってきたら誰だってビビるわ
2010/11/08(月) 12:14:17
算術シフトしかないCPUで、シフト演算はのんきに全部その命令を生成しちゃう
コンパイラだってあるかもしれんし、Cの仕様はそれすらimplementation-definedと
言っていそうな雰囲気がある。この場合は違ったわけだが。
2010/11/12(金) 23:22:51
たまにはキャリーさんのことも思い出してあげて
2010/11/13(土) 09:26:39
キャリーをさがせ
310デフォルトの名無しさん
垢版 |
2011/01/18(火) 01:52:26
NIST検査について質問です。乱数の統計的性質を調べるソフトなのですが、
このテストをすべて合格しないと乱数とは言えないのでしょうか?
特にFFT検査の場合に不合格になります。周期はないと思うのですが、なぜか
うまくいきません。それとも、これだけは絶対に通らなくてはいけないという
検査があるのでしょうか。どなたかご教示願います。
2011/01/19(水) 01:13:06
テストに合格しようがしまいが乱数は乱数じゃね?
2011/01/19(水) 01:42:36
二回(以上)続けて同じ数字が出ないものは乱数と呼びたくないな
2011/01/19(水) 09:31:42
>>312
>>284-288
2011/01/19(水) 16:52:17
疑似乱数に詳しくない俺が言うべきじゃないのかもしれないけど
乱数と疑似乱数を分けて考えてない人が居るような気がするんだ。
乱数、たとえばサイコロとかで作った乱数なら2回以上続けて6が出ることもあるでしょ。
でも線形合同法とかの疑似乱数は、同じ数が2回続けて出ることはないし、
循環しちゃうし乱数とは別物じゃない。だから、疑似と真の区別をはっきりさせないと
話がかみ合わなくなる気がするんだ。
2011/01/19(水) 17:03:32
本当にわかってないな
2011/01/19(水) 17:14:01
一気に糞スレ化したね。
2011/01/19(水) 17:53:20
>>315
何処がどう分かってないのかハッキリさせないと、その発言に意味はないと思いますよ。
意味のない発言の塊が2chなわけですけど
2011/01/19(水) 17:55:41
314は巨大な状態空間の一部だけ切り出してる擬似乱数が想像できないんだろ
2011/01/19(水) 18:20:58
>>317
>>313
2011/01/19(水) 18:39:02
>>318
そういうのは自分で考えさせないと
321314
垢版 |
2011/01/19(水) 19:16:42
>>318、320
よく分からないんですが、疑似と真乱数を分けて考える必要はないということですか?
2011/01/20(木) 00:03:34
何故区別する必要があると思ったの?
問題の出てくる例を挙げて欲しい。
2011/01/20(木) 00:15:30
えさを与えないでください
324314
垢版 |
2011/01/20(木) 01:23:19
>>322
そもそもこの2つは別物なのにその2つを同じ言葉で表すのが気持ち悪いと感じるんですよ。
>>310は疑似乱数のテストについて質問していて、>>311、312は真乱数を前提に
話してるみたいだし、>>313は疑似乱数を前提に発言してる。どうも疑似と真を分けてないから
話が噛合ってないように見えるんですよ
2011/01/20(木) 01:54:43
スルーしてください
2011/01/20(木) 05:00:53
スレタイも読めないヤツに何かが分かるなんて期待するヤツはいない。
327デフォルトの名無しさん
垢版 |
2011/01/20(木) 17:55:54
わざと答えをはぐらかしてるみたい
328デフォルトの名無しさん
垢版 |
2011/01/20(木) 18:03:55
324は正しい
2011/01/20(木) 18:06:56
乙です
2011/04/16(土) 11:03:07.44
George Marsaglia (1924 - 2011)
ttp://www.legacy.com/obituaries/tallahassee/obituary.aspx?n=george-marsaglia&pid=148777353
331デフォルトの名無しさん
垢版 |
2011/04/16(土) 11:16:55.91
age
2011/05/18(水) 23:19:05.17
乱数で数値nの約数の合計って使えないの?
結構バラバラなんだけど
2011/05/18(水) 23:21:48.27
とりあえず検定の結果を示してもらわんとなんとも。

それで線形合同法の推奨されてるパラメータを越える成績ならともかく。
2011/05/18(水) 23:58:05.10
数値nをどこから持ってくるのか詳しく聞かせてもらおうじゃないか
2011/05/19(木) 16:36:50.88
ぶっちゃけそこはn=n+(秒針)みたいなでいいと思う
あとn/2/(nの約数の合計)なら多分1〜0しかでない
2011/06/12(日) 19:32:33.48
RDRANDで疑似乱数オワタ?
2011/06/12(日) 21:41:33.09
>>336
http://software.intel.com/file/36945
>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 http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf に適合するように設計されている。
DRBG はチップに内蔵されている非決定的なエントロピー源により、定期的に初期値を再与されているため、
その結果、RDRAND命令は統計的に均一かつ非周期的、非決定的なデータを生成することが保証されている。

オンチップ-エントロピー源の出来如何に関わるという印象を受けますが、さて、どうでしょうか?
2011/06/12(日) 22:06:24.66
なんで擬似乱数が終わるんだよ?
分からない奴は黙っとけ
2011/06/12(日) 22:08:35.00
容易に再現できる乱数列が必要な応用があるとか全く知らないんだろ
2011/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です。
2011/06/16(木) 13:48:55.52
そもそもrandがスレッドセーフである保証がない。
スレッドセーフでない関数の読み出しにはロックをかけろ。

疑似乱数の実装がスレッドローカルならスレッドIDとタイムスタンプを組み合わせてseedに使うかな
2011/06/16(木) 21:37:26.52
>>340
rand_r()は実装されてないの?
シミュレーションとかに使うなら、当然もっとまともな乱数使うべきなんだけど
2011/06/16(木) 22:04:02.90
randってアルゴリズムからして処理系依存だから
ドキュメント読むしかないと思うが
2011/07/03(日) 19:51:40.73
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


ゴミは何いってもゴミ
2011/07/03(日) 20:36:04.58
おや知らないうちに、MTの周期の短い奴が
2011/07/03(日) 21:16:56.21
内部ベクトルぽ周期がxorshift128に似てるね
テストしてみるか
347デフォルトの名無しさん
垢版 |
2011/07/18(月) 01:12:26.71
初カキコというか質問があるんですが
2011/07/18(月) 01:23:00.97
うーん…
XorShiftでいいや。
349デフォルトの名無しさん
垢版 |
2011/07/18(月) 01:27:26.98
パワフルプロ野球スレでcupsを256にすれば天才選手(低確率で出る初期能力が強い選手)が出ると聞きました
乱数のことはよくわからないんですがそのcupsという項目があって
それを256に合わせればいいという認識でよろしいんでしょうか

それがあってるとして、
乱数は数値化しないとそれにあわせることはできないのでしょうか
もしくは数字だけが分かっていればなんとかなるものですか?
2011/07/18(月) 01:28:07.97
すいません…ageてしましました…
2011/07/18(月) 01:35:15.25
ゲームの話は板違い
352デフォルトの名無しさん
垢版 |
2011/07/18(月) 01:37:58.95
>>351
しゅません、ここしか見つからなくて…
2011/07/25(月) 07:45:02.26
>>348
ttp://raluck.exblog.jp/7153886/
2011/07/25(月) 19:27:51.78
乱数の「精度」って記述初めて見たぞ?言いたいことは判らなくも無いが。
2011/07/25(月) 19:32:37.26
普通、品質って言うわな。

シードとサンプルの長さと、どのような検定で、どういう風に結果が悪いのか、
定量的なことが書いてあれば一読に値すると思うが、これではわけわからん。
2011/07/25(月) 19:37:41.28
ゲームに使うとかいろいろな種を試したとか
乱数の事なんか何にも分かってないんだろう
悪いけどそんな個人ブログなんか読む価値ないよ
2011/07/25(月) 19:37:53.89
つーかウィキペディアのXorShiftの記事にも「精度」って言葉が使ってある。

誰だよほんとにもう。
2011/07/26(火) 12:24:34.03
http://ja.wikipedia.org/w/index.php?title=Xorshift&action=history
> 2011年7月25日 (月) 22:05 MetaNest (会話 | 投稿記録) (1,890バイト)
> (疑似乱数列の評価として「精度」なんて形容を使うのは聞いたことがない)

自分が聞いたことがないから間違っている、
という理由で編集する前に他の記事を確認してください。

http://www.google.co.jp/search?q=%E4%B9%B1%E6%95%B0+%E7%B2%BE%E5%BA%A6+site%3Aja.wikipedia.org
「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。
つまり品質の一部分ですね。
2011/07/26(火) 12:37:39.46
それはwikipediaのノート内で議論すべきでは
2011/07/26(火) 19:22:02.57
漏れは精度っていうのは誤差の大小だと思っていた。
2011/07/26(火) 19:28:23.63
一体何の誤差なのか
2011/07/26(火) 20:21:03.30
理想的な分散から外れる誤差というのはあるんじゃね
363ななし。
垢版 |
2011/07/27(水) 14:04:51.54
カ オ ス ラ ウ ン ジ ゆ る せ な ぁ い ー
2011/07/27(水) 16:02:15.11
the art of computer programinngの2巻の証明の行間が開きすぎだったから
細部まで証明しましたが何か?
2011/07/27(水) 22:37:01.04
頭いいね!
2011/08/02(火) 16:16:05.44
擬似乱数の偏りってビットごとの偏りとか周期性もちゃんと見たほうがいいと思うんだけどねえ。
乱雑性検定の一覧とか出したほうがいいんじゃないの
2011/08/02(火) 16:42:04.28
まさにそれをやってるのがdiehard testsじゃないの
2011/08/02(火) 19:08:01.33
その、「ビットごとの」は「周期性」にもかかってる?

ていうか現代的な生成法で特定のビット位置のみ変な特性があるとかまず考えられないように思うけど。
線形合同法ぐらいだと下の桁はダメダメだが。
2011/08/02(火) 19:15:45.81
>「精度」はどのくらいのビット数で示される範囲で乱数になっているかという意味で使われているようです。
これ、初期値によっちゃ10個ぐらい0が続いてもどうする?
2011/08/02(火) 19:17:27.23
>>367
そうなんだけど>353の人にお勧めしたい。
ちゃんとした統計を取る気があるが知らないだけのようなので。

>>368
両方。ビットの周期性も、全体としての周期性も。
線形合同法を意識して書いたからその通りですね。
2011/08/02(火) 19:45:25.22
> どのくらいのビット数で示される範囲で乱数になっているかという意味

数式で書いてくれ、で終わりだろこんな文
2011/08/03(水) 04:39:55.82
それより問題は>>348がTinyMTを試した結果なぜXorshiftを選択したかだな
2011/08/03(水) 19:21:14.73
内部ベクトルって見て楽しいのかね
2011/08/03(水) 19:57:03.18
見て楽しいかどうかは人それぞれ 4ビットでシフトレジスタ
ttp://upload.wikimedia.org/wikipedia/commons/7/7f/LFSR-F4.GIF
2011/08/04(木) 00:13:01.69
楽しくなければ乱数じゃない!
2011/08/04(木) 09:30:26.00
グレイコードってやつだな。
2011/08/04(木) 10:37:52.94
グレイコードは1度にハミング距離が1しか変化しないコードだろ
2011/08/04(木) 10:48:53.38
なんだ・・・ただ1づつ足していくだけかクダラネ。
2011/08/04(木) 12:02:14.43
ハミング距離も知らんのか
2011/08/04(木) 12:20:06.08
すごいすごいすごい
ハミング距離を知っているなんて凄いねーー
エライネー
天才だね〜
2011/08/04(木) 19:22:19.62
いやあそれほどでも(クィッ!
2011/08/26(金) 11:30:52.08
復帰
2011/11/07(月) 00:15:56.56
擬似乱数ではないのでスレ違いかもしれないが
ちょっとコンセプトを思いついたので実装してみた。
http://netrand-test.appspot.com/
2011/11/07(月) 00:34:50.29
何に使うんだそれは
2011/11/07(月) 07:01:49.82
/dev/random のような用途?
386デフォルトの名無しさん
垢版 |
2011/11/23(水) 11:19:10.85
なんか加減算だけでそれっぽいのができたぜ

http://www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=250&file=mon13.html
2011/11/23(水) 22:49:37.46
>>386
SFMTに対して、どこがアドバンテージあるの?
周期2^216091-1とかだぞ。
2011/11/23(水) 22:57:01.60
出力範囲が1000(10ビット未満)というのもな
32ビット精度必要なら4個を組にして使うわけだが,その上での一様性も相当疑わしい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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