読者です 読者をやめる 読者になる 読者になる

乱数生成のアンチパターン

C++

N3551 Random Number Generation in C++11


特定の範囲の値がほしい場合、剰余を使用してはいけません。

// サイコロを振る
int roll_a_biased_die( )
{
    static std::default_random_engine e{};
    return 1 + e() % 6; // これはだめ
}

ここでは剰余を使用して、1 + (0から5)の値が等確率で出力されることを期待していますが、剰余を使用した場合、小さい値が出力される確率が高くなるため、等確率にはなりません。
なので、uniform_int_distributionのような、専用の分布クラスを使用しましょう。