中央値(平均値)から、最小値と最大値に向けて左右対称で線形に出現確率が低くなるようなものには、std::piecewise_linear_distribution
を使うのがよさそう。
std::normal_distribution
は、与えるパラメータが平均値と標準偏差で、「平均値 ± 標準偏差」を超える値も出現するから、その外れ値を望まない場合に、std::piecewise_linear_distribution
で代用できそう。
これは、正規分布がほしい、という状況ではなく、中央値付近の値がほしい、という状況です。
#include <random> #include <array> #include <fstream> int main() { std::random_device seed_gen; std::mt19937 engine(seed_gen()); std::array<double, 3> intervals = {-1.0, 0.0, 1.0}, densities = { 0.0, 1.0, 0.0}; std::piecewise_linear_distribution<double> dist { intervals.begin(), intervals.end(), densities.begin() }; std::ofstream file("dist.tsv"); for (std::size_t n = 0; n < 1000 * 1000; ++n) { double result = dist(engine); file << result << "\n"; } }