
No.1ベストアンサー
- 回答日時:
仮にrand()に偏りがでないとしても
rand()%10000;という使い方では偏りがでることを知っておいてください。
RAND_MAXが32767の場合、
結果が2000になるにはrand()が2000 12000 22000 32000の4パターン
ありますが
3000の場合は3000 13000 23000の3パターン
となり偏りが出ます。
ただXorshiftであれば乱数の最大値が大きいため
ゲーム等であれば
xor128() % 10000で十分な精度だと思います。
※xor128()はXorshiftの関数
この回答へのお礼
お礼日時:2010/11/25 16:37
今まで使っていたrand()とはそういう存在で
%で余りを求めるのはそういう意味だったのですね。
利用方法でどの程度の偏りが出るかうっすら解った気がします。
ご回答、ありがとうございました。
No.2
- 回答日時:
#1 にも書かれていますが, 最終的に得たい値の範囲が疑似乱数で得られる値の範囲に対して十分小さければ余りを求めるような方法で「だいたい一様」にすることができます.
本気で一様にしようとすると, Xorshift の周期が 2^128-1 であることが問題になります. Xorshift で得られるのは 32ビット整数値で, これと周期とを比較すればわかるように「32ビットのすべての整数値が同じ頻度で現れるわけではない」ということになります. つまり, Xorshift で得られる値がすでに「完全に一様ランダム」ではありません. そこの補正から始める必要があります.
この回答へのお礼
お礼日時:2010/11/25 16:41
難しく理解しきれない部分が有りますが、
「だいたい一様」と「完全に一様ランダム」という差が絶対に出るのですね。
今回は「だいたい一様」で良いのでどうやら%するだけで大丈夫ですが、
「完全に一様ランダム」ではないと肝に銘じておきます。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
DataGridView 複数行同時変更...
-
VB6.0-整数と余りを求める
-
フリーランタイマーの時間差分...
-
数字の位ごとの値を表示するプ...
-
C#の問題で2つの整数a,bの...
-
DWORDって
-
関数で複数の値を戻り値として...
-
VBAで配列のNULL判定
-
Xorshiftの値を絞り込む方法を...
-
Excel-vba 文字列と変数を...
-
vbaで極大値を抽出する方法
-
VBAの定数の使い方で、計算値を...
-
C#でのIF文 時間比較のやり方
-
相関係数p値の出し方
-
足して100になるような乱数のア...
-
定数のメリットとは?
-
VBA コンボボックスの値をスピ...
-
jsp~jspにhiddenを使って変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
C#で動的にコントロールを取得...
-
VBAで配列のNULL判定
-
フリーランタイマーの時間差分...
-
足して100になるような乱数のア...
-
DWORDって
-
ラジオボタンの値の取得につい...
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
-
定数のメリットとは?
-
C#でのIF文 時間比較のやり方
-
Excel VBA Forの使い方について...
-
【C++/CLI】コンボボックスの値...
-
DataGridView 複数行同時変更...
-
世界のナベアツ
-
CGIのPerlの変数をJavaScrip...
おすすめ情報