- ベストアンサー
名前なのですが・・・
「線形合同法を用いた擬似乱数を発生させるために写真の式を用いた。この式を用いると0~M-1までの整数が周期Mで一回ずつ現れます。このような乱数は何と呼ばれますか?」 という問題なのですが、いろいろ調べてはいるのですがわかりません。 回答おねがいします。
- king156
- お礼率53% (8/15)
- その他([技術者向] コンピューター)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
http://mukun_mmg.at.infoseek.co.jp/mmg/bncpp/al013.html より引用 ★一様乱数(線形合同法)★ もっと有名で、簡単なアルゴリズムに「線形合同法」があります。 X_n = (A・X_n-1 + C) mod M 以下のページも参照 http://kodamaforest.blog112.fc2.com/blog-entry-50.html でしょうか
関連するQ&A
- Excelで乱数発生のアルゴリズム
今、Excelでの乱数発生に関して勉強しているものです。 プログラミングの本や、乱数の本を読んで線形合同法という漸化式が乱数発生のときに使用されているというところまで調べることはできたのですが、Excelでのアルゴリズムについてはあまり調べられなくて困っています。 知っている方がいらっしゃいましたら教えてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 線形合同法(乗算型)による乱数発生法
javaを使って乱数を発生するプログラムを作っています。 線形合同法(乗算型)に基づいて発生させようと思うのですが、疑問点があり質問しました。 乱数発生の漸化式 X(i+1)= a*X(i) (mod M) で、a,M,そして乱数の初期値を決めたいのですが、ネットを使って調べたところ、 a=16807 M=2147483647 が良いという記述がありました。 しかし、これをプログラムに反映させるとintの範囲から出てしまうため、検出値にマイナスが入ってしまいます。 また乱数の初期値に関する記述が見つからなかったので、どのような値にすべきか悩んでいます。 また、検出値をある範囲に(例えば100000まで)にしたい場合は、M=100000にすればいいと思うのですが、その場合のaや初期値の値はどのように決定したらよいのでしょうか? 教えて下さい。よろしくお願いします。
- ベストアンサー
- Java
- 合同混合法・乗算合同法の実際の周期について
現在「混合合同法」と「乗算合同法」を用いた乱数の発生実験を以下のような条件で行っております。その中でいくつか疑問点が出てきたので質問いたします。 「混合合同法」 R(i+1)=R(i)*A+C (modM) A=1229 C=351750 M=1664501 R(0)=1 「乗算合同法」 R(i+1)=R(i)*A(modM) A=48828125(=5^11) M=2^31 R(0)=584287 これらの実験を行う中で周期をMに設定しているのに、実際に同じ値が返されてくるまでの周期が「混合合同法」では約半分、「乗算合同法」では約四分の一になっております。なぜこのようになるのでしょうか? また乗算合同法では奇数しか返されないのですがこの理由と、奇数しか返されないことで起こる不都合もお教えください。 なお、これはCでプログラミングしているのですが同一の値が返される回数を簡単に表示するようにするにはどのようにプログラムすればよいでしょうか?ご助言ください。
- ベストアンサー
- その他(プログラミング・開発)
- 乱数について
線形合同法が乱数生成アルゴリズムとして欠点が多いことは有名です。 http://www001.upp.so-net.ne.jp/isaku/rand.html さて、自分のPC(OSはubuntu、言語はC++です。)で、rand()を用いて、 最下位ビットが0、1が繰り返して現れるかどうかを確認しましたところ、 そんなことはありませんでした。 このことから、自分のマシンは線形合同法を用いていないと判断してよいのでしょうか? また、よろしければ、マシンがどの乱数アルゴリズムを使っているかを 調べる方法を教えてください。 先のURLでは、「/usr/ucb/cc を解析した結果、」とありますが、 そんなディレクトリはありませんでした。
- ベストアンサー
- C・C++・C#
- 初心者です。プログラミング 3×3行列の積
先日、課題が出されて、1週間ほど考えてはみたのですがわからなかったため質問させていただきます。 3行3列の行列の積を求めるプログラムを作成しなさい。ただし、各行列要素は疑似乱数を使って値を求めるようにしなさい。また各行列要素は二桁以下の整数とし、行列の積を計算する部分を関数で行うようにしなさい。という問題なんですが、どなたかわかる方がいらっしゃいましたらご回答よろしくお願いいたします。できれば詳しく式などを書いていただきたいです。
- ベストアンサー
- C・C++・C#
- 合同について
合同の定義は 整数aとbの差がmの倍数であるとき、aとbはmを法として合同 整数aとbをある整数mで割った時の余りが等しいとき、aとbはmを法として合同 このように二つありますが 実際に 4を3で割ると1余る 7を3で割ると1余る 10を3で割ると1余る そして10-7=3 7-4=3 10-4=6 と全て3の倍数になる。 となるというのはわかるのですが なぜ 整数aとbの差がmの倍数であるとき、mで割ったaとbの余りが同じになるのでしょうか。 そうなるものだから、と考えるしかないのでしょうか。 なぜうまい具合にそうなるのか理解できず、すっきりしません。 よろしくお願いします。
- ベストアンサー
- 数学・算数
お礼
回答本当にありがとうございます!! 詳しい説明の載ったリンクまで張っていただいて! とても参考になりました^^ なるほど、一様乱数というのですね^^。