
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の使い方
-
VB6.0-整数と余りを求める
-
Rubyで1ミリ秒のsleepできない...
-
c言語で乱数を扱うときの
-
プログラミング 2つの整数を読...
-
ACCESS2000 VBA フォームのコン...
-
VBAで配列のNULL判定
-
フォームを開くときに、コンボ...
-
VBAでダブルコーテーション入り...
-
COLUMN(1:1)の意味を教え...
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
VBAのWorksheetFunctionの引数...
-
構造体からレコードセットへの代入
-
エラーの意味は? Lvalue req...
-
整数xxxが大き過ぎますというエ...
-
basp21のアップロード
-
C言語で全角文字を扱いたいので...
-
jsp~jspにhiddenを使って変数...
-
Win32APIでシリアル通信をする...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
フリーランタイマーの時間差分...
-
VBAの定数の使い方で、計算値を...
-
足して100になるような乱数のア...
-
Access2003 オートナンバーの現...
-
DWORDって
-
Xorshiftの値を絞り込む方法を...
-
ラジオボタンの値の取得につい...
-
C#で動的にコントロールを取得...
-
DataGridView 複数行同時変更...
-
VBA コンボボックスの値をスピ...
-
vbaで極大値を抽出する方法
-
コンボボックスの名前を変数に...
-
Nullってどういう意味ですか?
-
データ構造のmapとは?
おすすめ情報