
javaを使って乱数を発生するプログラムを作っています。
線形合同法(乗算型)に基づいて発生させようと思うのですが、疑問点があり質問しました。
乱数発生の漸化式
X(i+1)= a*X(i) (mod M)
で、a,M,そして乱数の初期値を決めたいのですが、ネットを使って調べたところ、
a=16807
M=2147483647
が良いという記述がありました。
しかし、これをプログラムに反映させるとintの範囲から出てしまうため、検出値にマイナスが入ってしまいます。
また乱数の初期値に関する記述が見つからなかったので、どのような値にすべきか悩んでいます。
また、検出値をある範囲に(例えば100000まで)にしたい場合は、M=100000にすればいいと思うのですが、その場合のaや初期値の値はどのように決定したらよいのでしょうか?
教えて下さい。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> 「乗算の結果あふれた部分」というのは、「マイナスになってしまう検出値」という解釈でいいのでしょうか?
たとえば8ビットに単純化して話をすると
0xff × 0xff とかすると 0xfffe がその積になりますが、ここで
上位の0xff は無視するという意味です。
有符号の32bit整数であるなら、0x7fff_ffffを越えたところでは
最上位ビットは無視するということでいいのではないでしょうか。
これはまあ「マイナスになってしまった値」ですけどね。
2度も回答していただいてどうもありがとうございます。
8ビットの知識は全く無いのですが、なんとなく理解できました。
ありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行シェルからCOBOLへパラメー...
-
Evaluate()に文字列の形式の数...
-
wsprintf関数の使い方について
-
ResultSetの内部構造(Java)
-
javaの演算子の部分ですが 4行...
-
getParameterの値変更
-
結合した文字列をファイル名に...
-
CASLIIの問題なんですが
-
C言語の変数(LSB)の合わせ込...
-
C#について質問です。文字列型(...
-
JSPでの計算結果表示
-
オブジェクトの中のプロパティ...
-
JSPでDBからデータ読み込みブラ...
-
ループ処理の際、最後だけ","を...
-
ORA-01858: 数値を指定する箇所...
-
system.out.printが出力されない
-
行の途中から読み込む方法
-
IF関数でEmpty値を設定する方法。
-
System.err. printlnとSystem.o...
-
C# ListBoxのインデックスの値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ArrayListの要素数の上限
-
JSPでの計算結果表示
-
javaのCSVデータ読込についてです
-
JSPでHashMap・配列の変数の値...
-
DateTimePickerに値を入れたい...
-
ダブルクォーテーションを含む...
-
matchesを否定文として使う方法...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
ResultSetの内部構造(Java)
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
JavaScriptの変数の値が消える!?
-
String型の値が大文字か小文字...
-
Request.formの値の初期化
-
実行シェルからCOBOLへパラメー...
-
VB6,論理演算子Orの使い方がわ...
-
DOSバッチで変数の値を変数名に...
-
char型での演算子
-
日付や時刻の"01"を" 1"に変換...
おすすめ情報