【C++】正規分布・t分布・一様分布・対数正規分布・二項分布に従う乱数の発生方法
一様分布に従う乱数
C++では、std::uniform_real_distribution や std::uniform_int_distribution を使用して一様分布の乱数を生成できます。
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<double> dist(0.0, 1.0);
for (int i = 0; i < 5; ++i) {
std::cout << dist(gen) << "\n";
}
return 0;
}
正規分布に従う乱数
std::normal_distribution を使用すると、正規分布(ガウス分布)の乱数を生成できます。
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<double> dist(0.0, 1.0); // 平均0, 標準偏差1
for (int i = 0; i < 5; ++i) {
std::cout << dist(gen) << "\n";
}
return 0;
}
t分布に従う乱数
std::student_t_distribution を使うことで、t分布の乱数を生成できます。
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::student_t_distribution<double> dist(10.0); // 自由度10
for (int i = 0; i < 5; ++i) {
std::cout << dist(gen) << "\n";
}
return 0;
}
対数正規分布に従う乱数
std::lognormal_distribution を使うと、対数正規分布に従う乱数を生成できます。
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::lognormal_distribution<double> dist(0.0, 1.0);
for (int i = 0; i < 5; ++i) {
std::cout << dist(gen) << "\n";
}
return 0;
}
二項分布に従う乱数
std::binomial_distribution を使うことで、二項分布の乱数を生成できます。
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::binomial_distribution<int> dist(10, 0.5); // 試行回数10, 成功確率0.5
for (int i = 0; i < 5; ++i) {
std::cout << dist(gen) << "\n";
}
return 0;
}