
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(コンピューター・テクノロジー) エクセルの課題について 1 2022/07/25 14:39
- Excel(エクセル) エクセルで、指定した整数の範囲を乱数4つ発生させる場合 4 2022/04/01 11:44
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- Visual Basic(VBA) VBA 変数が思うように機能しません。ご教授願います。 7 2022/08/14 13:50
- その他(ゲーム) ポケモン乱数 色違い 伝説 HGSS(ハートゴールド・ソウルシルバー) 1 2022/05/06 13:13
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
異なる文字列のマッチングを、D...
-
足して100になるような乱数のア...
-
十進BASICでの再帰についての質...
-
C++でvectorにテキストファイル...
-
ラップ関数とはどんなものですか?
-
c言語の問題です 課題1 (二分探...
-
未解決の外部シンボル _printf...
-
「指定されたキャストは有効で...
-
systemの戻り値を取得する方法
-
double型の値を、一桁ずつint型...
-
c言語 〇×ゲーム
-
C言語で三目並べをするプログラ...
-
剰余演算を論理演算と加減算に...
-
○×ゲーム
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語の基礎 . 2乗値の差につ...
-
C言語->アセンブリ->C言語で構...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報