
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
ANo.1 にあるとおり、C++なら一様分布が簡単に作れます。
#include <iostream>
#include <random>
int main() {
// メルセンヌ・ツイスター
std::mt19937 generator;
// 0..9 一様分布
std::uniform_int_distribution<int> distribution(0,9);
for (int i = 0; i < 20; ++i) {
int number = distribution(generator);
std::cout << number << ' ';
}
}
No.5
- 回答日時:
全部整数で計算するなら「0以上 Max未満の一様乱数値を (Max/n) で割った値」は n になる可能性がありますね>#3.
ただ, 果てしなく厳密にいいだすと「そもそもメルセンヌツイスターで得られる値は完全に一様な分布をするのか」って問題があっちゃったりしますが.
No.4
- 回答日時:
#3の回答ですが、
> 0以上Max未満の一様整数乱数から、 0以上n未満の一様整数乱数を作る方法は
> (1) n で割った余り
> (2) (Max/n)で割った商
> の二つが主なものです。
これだと、一様乱数にはならないですよね。
(1)で一様乱数を作るには、arc4random_uniformでやっているようなテクニックが必要です。
http://www.opensource.apple.com/source/OpenSSH/O …
つまり、一様乱数であることを崩す値を捨てます。
(2)についても、整数でやっているとしたら、わり算の余りを切り落としているのでやはり一様にはならないと思います。
あと、MTでやるとしたら、浮動小数点演算が入っても良いなら、genrand_real2()やgenrand_res53()と10を掛けて、小数点以下切り捨てではないでしょうか。
普通は浮動小数点演算を嫌って、arc4random_uniform的なやり方でやるかと思いますが。
No.3
- 回答日時:
0以上Max未満の一様整数乱数から、 0以上n未満の一様整数乱数を作る方法は
(1) n で割った余り
(2) (Max/n)で割った商
の二つが主なものです。
> 上記では0~9までの乱数を求める事が出来ますが、余りは下二桁のみに依存するので
> 精度が低いのでは?と考えます。
それは、乱数の発生方法によります。
確かに、線形合同法等は短周期のパターンが出やすいことで知られています。
資料によれば、MTは、かなりの長周期で、その中のどこを取っても偏りの少ないことが知られています。
No.2
- 回答日時:
>厳密に乱数を生成できる方法
>精度が低いのでは?
何をもってそう思われますか?
実行環境があるなら10万回ほど実行して散布表を作ってみてはどうですか?
偏りがなければいいんでしょ?
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
(マルチスレッド)_beginthrea...
-
「指定されたキャストは有効で...
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
任意の文字列のアルファベット...
-
return 1L
-
【C++】関数ポインタの使い方
-
式は定数値が必要です」という...
-
read関数をノンブロッキングで...
-
実数の整数部,小数部の取得
-
C言語での奇数の和
-
C言語で分からないところがあり...
-
double型の値を、一桁ずつint型...
-
DLLをGetProcAddress()で実行で...
-
課題でつまってます・・・
-
ColorをRGBで指定する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
変数名を引数として渡す、アド...
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
因数分解を行うプログラムについて
-
(int *)の意味
-
C言語での奇数の和
-
system関数がうまくいかない
-
c言語の配列を使ってサイコロを...
-
シグマ公式・・・C言語
-
read関数をノンブロッキングで...
-
構造体の勉強中です 合計点の高...
-
式は定数値が必要です」という...
おすすめ情報