uniform_real_distribution
右端は含まれていません。これは、E = 0の乱数を生成することは正しい方法ではないことを意味します。開いている間隔または閉じた間隔のどちらかで、半開きではなくuniform_real_distribution
を作成するにはどうすればよいですか?E = 0の浮動小数点乱数を生成
負の値への偏りは問題ではないと主張できますが、その差は小さいためですが、それでも完全には正しくありません。
uniform_real_distribution
右端は含まれていません。これは、E = 0の乱数を生成することは正しい方法ではないことを意味します。開いている間隔または閉じた間隔のどちらかで、半開きではなくuniform_real_distribution
を作成するにはどうすればよいですか?E = 0の浮動小数点乱数を生成
負の値への偏りは問題ではないと主張できますが、その差は小さいためですが、それでも完全には正しくありません。
あなたはstd::nextafter
でstd::uniform_real_distribution
を組み合わせることができます
template <typename RealType = double>
auto make_closed_real_distribution(RealType a = 0.0, RealType b = 1.0) {
return std::uniform_real_distribution<RealType>(
a, std::nextafter(b, std::numeric_limits<RealType>::max()));
}
検索のビットの後、これは実際にen.cppreferenceに提案された方法です。
あなたはオープン間隔を作りたい場合は、単に最初の引数にnextafter()
を使用します。それはさえ[関連ドキュメント](http://en.cppreference.com/で述べています@mkluwe
template <typename RealType = double>
auto make_open_real_distribution(RealType a = 0.0, RealType b = 1.0) {
return std::uniform_real_distribution<RealType>(
std::nextafter(a, std::numeric_limits<RealType>::max()), b);
}
cpp/numeric/random/uniform_real_distribution/uniform_real_distribution)ので、浮動小数点のすべての機能を心に留める必要はありません。 –
@mkluweどのように私はそれを逃すことができます – user877329