- 1 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 02:19:35 ]
- 擬似乱数発生器について語ろうか。
- 367 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:54:16 ]
- 公取委かJAROに訴えればいいのそれ?
- 368 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 23:50:08 ]
- >>366
iPodShuffule訴えてくれ。
- 369 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 22:08:43 ]
- >>368>>367
アップルに騙されたオマイがDQN
- 370 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 10:15:46 ]
- 最も単純で低精度な擬似乱数の作り方てどこかにない?
- 371 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 10:25:27 ]
- どんなアルゴリズムでも擬似乱数と言い張れば、それは擬似乱数
- 372 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 10:53:43 ]
- >370
ttp://ja.wikipedia.org/wiki/擬似乱数
- 373 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 11:21:27 ]
- もっとも単純なわけでも低精度なわけでもないが
地球上でもっとも虐げられている擬似乱数アルゴリズムは やっぱ線形合同法なんじゃね?
- 374 名前:デフォルトの名無しさん [2007/02/11(日) 18:07:28 ]
- >>370
5かけて1足してffでマスク
- 375 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:24:21 ]
- >>370
擬似バタフライ効果があれば何でもいいんじゃない?
- 376 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 15:47:49 ]
- >>370
常に定数を返す擬似乱数がもっとも周期が短い。 これより周期の短い擬似乱数はない。
- 377 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 22:46:09 ]
- 何も返さない擬似乱数
- 378 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:58:43 ]
- 何も返さない擬似乱数は周期が短いとは言えない。
何も返さない擬似乱数は分布が偏っているとは言えない。 何も返さない擬似乱数は擬似乱数テストプログラムをテストするために使えない。 370の目的はたぶん最後のコレ。
- 379 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 20:58:47 ]
- >>376
定数ってだけじゃなく1bitであるべき(どうしても int にするなら 0 or -1)だろうな。 そうじゃないとbit単位のストリームとして見たときにbit数分の周期が存在することになる。
- 380 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 08:13:45 ]
- うむ、0と1の分布という点からも0か-1であるべきだな。
そして、0超過状態からの脱出という観点からは0であるべきだな。
- 381 名前:171 [2007/04/10(火) 04:02:15 ]
- いつのまにやらSIMD対応ほかいろいろ改良してるモノが出てるな。
まあ俺が以前いってたSIMD対応はメモリ上の並びをパズルみたいにコチョコチョいじるだけで メモリ使用量も増やさず意外と簡単にできたんだが、 それ以外の改良となると、やっぱじっくり研究しないといかんわな。 悔しいが現役の学生にはかなわん。これは認めておいて、 とりあえずコード読んで高速化の余地を探すとするか。
- 382 名前:デフォルトの名無しさん [2007/04/10(火) 04:26:31 ]
- どっちの乱数の方が優れているか判定をおしえろ
- 383 名前:382(乱数の精度判定) [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;}
- 384 名前:382 改良版 [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);}
- 385 名前:382 [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秒
- 386 名前:CryptGenRandomはいまいち [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 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:22:01 ]
- コード直貼りもいいが、うpろだを活用してくれ
- 388 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 01:36:14 ]
- ム板的にはwikiのが良くね?
- 389 名前:デフォルトの名無しさん [2007/04/11(水) 02:34:04 ]
- 疑似乱に周期があるから、パイで検定するときは、1000回、10000回、と増やして
いって近似がパイに近づかなくなる回数を調べる事も重要
- 390 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 16:34:53 ]
- 擬似乱数のことを擬似乱と略す人間は初めて見た
- 391 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 20:00:37 ]
- このスレは共立版 knuth の3巻を読んでる事を前提にしていいんですよね?
- 394 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 20:59:09 ]
- >>392
d。 win_rand() で 1 bit 捨ててんのはなんで?
- 395 名前:デフォルトの名無しさん [2007/04/16(月) 21:15:24 ]
- 捨てないと符号関係のエラーがでるんだが
- 396 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 22:10:39 ]
- >>393
共立じゃなくてサイエンス社
- 398 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 22:12:25 ]
- boost::random::mersenne_twisterはだめなん?
- 399 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 01:51:37 ]
- ダメじゃないよ。
というか実質的には最強。 とりあえずwikiでも読んでみなよ。
- 400 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:30:13 ]
- WELLの登場で次世代の擬似乱数は混沌とするかと思ったが、
これでしばらくMTの系譜が続くのは確定だな
- 402 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:40:44 ]
- 周期長っ!
- 403 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 00:14:07 ]
- 速っ
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/speed.html
- 404 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 10:51:22 ]
- boost::random::mersenne_twister「メモリぱくぱく おいちい^^^^」
- 405 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 20:33:08 ]
- >>402
>>404 だからSFMTでは短周期版も作ったんじゃないか
- 406 名前:デフォルトの名無しさん [2007/07/04(水) 20:56:27 ]
- SFMTのboost対応版マダー?
- 407 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 00:18:50 ]
- Twister 系の擬似乱数て
単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。 適度に内部ビット数増やせば、周期なんて測定不能な域にするのは容易じゃん。 ワンチップとかの超小型マイコンで作るんじゃないんだし、今のPCなら 乱数で使うメモリは捨てるほどあるわけだしな。
- 408 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 00:29:35 ]
- >単にカオスの簡単な例「2重振り子」を演算で出しただけじゃん。
それを実装したことに意味があるんじゃん。 …って開発者が言ってた。
- 409 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:43:55 ]
- >>408
似た事を主張した奴とか類似物を作ったやつも、正式に論文発表しなかった だけにすぎない。
- 410 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 09:47:42 ]
- コロンブスなんて西に航海しただけ。コロンブスがしなくても誰かがやったよね。
- 411 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 09:52:53 ]
- コロンブスってタダの方向音痴なんじゃないかと思う
- 412 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 10:22:53 ]
- 「西に向かえば地球は丸いそうだからアジアに辿り着ける筈だ」と言う発想は方向音痴とはいえまい。
- 413 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 13:30:58 ]
- 西に向かって最初に見つけた陸地を西インド諸島と名付けるのはどうか。
せめて西ジパング諸島と呼ぶべきだったと思う。
- 414 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 15:29:18 ]
- コロンブス以前に原始人が海をわったったという遺伝子が原住民の
遺伝子確認で分かっている点について(ry
- 415 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 20:29:40 ]
- 同時代に同じことを考えた香具師はいっぱいいる
コロンブスチームのマーケティングの勝利
- 416 名前:デフォルトの名無しさん mailto:sage [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 名前:・∀・)っ-○◎● mailto:sage [2007/07/11(水) 01:22:51 ]
- >>406
斉藤君に連絡とってみるかな。 個人的にはSSE2非対応CPU向けにMMX版くらいは欲しいんだが。 本人が動いてくれるくれないにかかわらず、SSE2版だけならVC8/ICC用の クラスを作ってみようと思うが。どうせ俺が使うし。
- 420 名前:デフォルトの名無しさん [2007/07/11(水) 01:28:04 ]
- で、SCEからオファーはきたの?
- 421 名前:・∀・)っ-○◎● mailto:sage [2007/07/11(水) 01:34:19 ]
- 音沙汰無いよ
- 422 名前:・∀・)っ-○◎● mailto:sage [2007/07/11(水) 01:59:55 ]
- Cスタイルのコーディングってさ、どうしてグローバル変数汚染しようとするのかねぇ。
スレッド毎にインスタンス生成すればスレッドセーフうめぇwwww
- 423 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:17:06 ]
- スタックに作ればいいやん
- 424 名前:・∀・)っ-○◎● mailto:sage [2007/07/11(水) 07:26:20 ]
- たとえばさ、MTのgenrand()を複数のスレッドから参照してみてごらん。必ずおかしなことがおきます。
BoostのRNGは全部クラス化してあって一時計算領域もインスタンス毎に生成するからスレッドセーフなのよ
- 425 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 07:55:00 ]
- 乱数生成ルーチンがバグってて出鱈目な値を返していても誰も気がつかない罠
- 426 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:19:10 ]
- 内部ベクトルでかいんだから、ミューテックスのがよくね?
- 427 名前:デフォルトの名無しさん [2007/07/12(木) 21:44:58 ]
- おいおい19937ビット+αだぜ?
- 428 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:28:42 ]
- TLS使えばしまいだろ
- 429 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:36:08 ]
- >>428は>>422宛ね
- 430 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 23:29:54 ]
- TLSとは何か。
Transport Layer Security Thread Local Storage True Love Story いろいろあるんだな……
- 431 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:11:06 ]
- いや、内部ステートをスレッド毎に持つというのは
確かに複数スレッドからの同時アクセスの点では良いのだが 例えばよく使われるsrand()はどうするのか。 スレッド毎にsrand()を呼ぶのか あるいはsrand()の内部でスレッドを数え上げるのか srand(time(NULL))の後にスレッドを作成したらどうなるのか ↑を最初に一度だけ呼んである過去のコードの扱いはどうなるのか 等々、面倒くさいことがありすぎるよ。 まともなコードで、srand()を呼ばずにrand()を使っているものがあるとは思えないし。 もちろん、「標準のrand()」を置き換えるのではなく 「自分で使う乱数生成器」をどうするか、という話なら 好きなようにどうぞ、というだけだけど。
- 432 名前:・∀・)っ-○◎● mailto:sage [2007/07/13(金) 03:11:46 ]
- そりゃ各スレッド毎にパラメータがあるわけだから、それぞれに初期化が必要になるだろうね。
種は現在時間+スレッドID+GUID/UUID+HDDシークタイムからとった自然乱数もどき+・・・・ 見たいな感じでいろいろ組み合わせればよくね? 最近のMTの派生実装は種を配列で与えることができるんで、ユニークな乱数列になるように なるべく多くのパラメータを与えるといい。 MTは種さえ被らせなきゃそこそこうまくバラけてくれる。
- 433 名前:デフォルトの名無しさん [2007/07/13(金) 08:20:03 ]
- CryptGenRandは?
- 434 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 09:29:57 ]
- そういう話かよ?
- 435 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 12:42:16 ]
- ワークメモリがスレッド毎に独立してると、たとえばモンテカルロみたいなのを複数スレッドで分割処理やりたいときに有用。
プロセスを分ければいいと言われると返す言葉がないがね。
- 436 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:40:05 ]
- CryptGenRandomって自分じゃジェネレートしてないのに、なんでGenRandomなんだ?
GetRandomじゃないのか?
- 438 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:01:44 ]
- その Gen は Generate ではなく、元、つまり集合の1要素だって
おじいちゃんがゆってた。
- 439 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:24:49 ]
- 「源」じゃないの?
すなわち「おじいちゃんの名前(ゲンじいちゃん)」 え?ちがう?
- 440 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:29:36 ]
- ララ… わしゃ悔しいわい
- 441 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 14:32:34 ]
- アゴなしの人か。
- 442 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:22:22 ]
- DDAで円の軌跡を計算して、それを2重にして乱数作ったんだが、
擬似乱数として性能がいいのか調べる方法はある?1から10までの分布は それらしくなっているんだけどな。
- 443 名前:・∀・)っ-○◎● mailto:sage [2007/07/19(木) 23:57:25 ]
- だんごやさんはSSE2用sfmtをboostに移植しようとしたがテンプレート地獄に涙目
- 444 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:54:11 ]
- ビット毎の出現確率でも調べたら?
- 445 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 07:35:38 ]
- >>442
どっかに基準とはる判定方法があったかも
- 446 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 09:09:19 ]
- とりあえず、こんなのは見つかった。
DieHarder: A Random Number Test Suite Robert G. Brown's General Tools Page www.phy.duke.edu/~rgb/General/dieharder.php
- 447 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 19:11:11 ]
- >>446
乱数検定の定番だな
- 448 名前:デフォルトの名無しさん [2007/08/15(水) 00:44:29 ]
- いろんな圧縮アルゴリズムにかけて
圧縮率を見るのってどうなの? 邪道?
|

|