確率に応じてboolを返す
引数として確率を渡したらその確率でtrueが返るような関数です。モンテカルロ計算したい場合とか必要になる機能です。
まあ理論も実装も特に難しくなく、0〜1の半開区間な分布をデデキント切断すればいいだけです(謎)
template< class PRECISION > class Probability { public: Probability( unsigned long seed ): m_Rnd( seed ),m_Dist( 0, 1 ){} bool operator()( PRECISION probability ){ return m_Dist( m_Rnd ) < probability; } private: std::mt19937 m_Rnd; std::uniform_real_distribution< PRECISION > m_Dist; };
無駄にクラステンプレートにしてますのでdoubleとfloatの好きな方をどうぞ。
テストケースとしては0だと必ずfalse、1だと必ずtrue、1/2だと分布を正確に半分にしているかをホワイトテストすれば十分でしょう。
とりあえず、なかなかC++11の乱数クラスの名前を覚えられないので自分用のmemoでしたorz