回答編集履歴

2

追記

2020/05/16 17:43

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -107,3 +107,5 @@
107
107
  Thread model: posix
108
108
 
109
109
  InstalledDir: /usr/local/bin
110
+
111
+ 参考:[なぜ乱数ジェネレーターを使用しているときにモジュロバイアスがあると人々が言うのですか?](https://www.it-swarm.dev/ja/c++/%E3%81%AA%E3%81%9C%E4%B9%B1%E6%95%B0%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%AD%E3%83%90%E3%82%A4%E3%82%A2%E3%82%B9%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E4%BA%BA%E3%80%85%E3%81%8C%E8%A8%80%E3%81%86%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/1066683422/)

1

ソース追記

2020/05/16 17:43

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -5,3 +5,105 @@
5
5
  の場合は、rand()の発生する乱数を3で割ったあまり(つまり、0〜2)を使いたいからでしょう。
6
6
 
7
7
  例えば、rand()%10とすれば0〜9が得られます。
8
+
9
+
10
+
11
+ 試しに、通常のrand()関数とmt19937を使ったテストをしてみました。
12
+
13
+ ```cpp
14
+
15
+ #include <iostream>
16
+
17
+ #include <cstdlib>
18
+
19
+ #include <random>
20
+
21
+ //
22
+
23
+ using std::cout;
24
+
25
+ using std::endl;
26
+
27
+ //
28
+
29
+ const int R_MAX = 1000;
30
+
31
+
32
+
33
+ int main(void)
34
+
35
+ {
36
+
37
+ int rr[4] = {0};
38
+
39
+ int mr[4] = {0};
40
+
41
+
42
+
43
+ for(int i = 0; i < R_MAX; ++i) {
44
+
45
+ rr[rand( ) % 3]++;
46
+
47
+ }
48
+
49
+ //
50
+
51
+ std::mt19937 mt(std::random_device{ }( ));
52
+
53
+ std::uniform_int_distribution<int> dist(0, 2);
54
+
55
+
56
+
57
+ for(int i = 0; i < R_MAX; ++i) {
58
+
59
+ mr[dist(mt)]++;
60
+
61
+ }
62
+
63
+ //
64
+
65
+ for(int i = 0; i < 4; ++i) {
66
+
67
+ cout << i << ": " << rr[i] << " " << mr[i] << endl;
68
+
69
+ }
70
+
71
+ return 0;
72
+
73
+ }
74
+
75
+ ```
76
+
77
+ 結果は。以下のように成りました。(同一数値が連続する等の)発生状況は未検証ですが、1000回の試行での数値の発生件数に付いては、ほとんど差異はないように思います。
78
+
79
+
80
+
81
+ ```text
82
+
83
+ usr ~/Project/test % ./a.out
84
+
85
+ 0: 354 319
86
+
87
+ 1: 305 345
88
+
89
+ 2: 341 336
90
+
91
+ 3: 0 0
92
+
93
+ ```
94
+
95
+ 環境は以下
96
+
97
+ usr ~/Project/test % uname -a
98
+
99
+ Linux usr.Mint193 5.3.0-51-generic #44~18.04.2-Ubuntu SMP Thu Apr 23 14:27:18 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
100
+
101
+ usr ~/Project/test % c++ --version
102
+
103
+ clang version 10.0.0 (trunk 375507)
104
+
105
+ Target: x86_64-unknown-linux-gnu
106
+
107
+ Thread model: posix
108
+
109
+ InstalledDir: /usr/local/bin