c – std :: uniform_real_distribution包含范围
发布时间:2020-12-16 03:24:08 所属栏目:百科 来源:网络整理
导读:C 11 std :: uniform_real_distribution(-1,1)给出范围[-1,1)中的数字. 您将如何在[-1,1]范围内获得统一的实际分布? 实际上这可能并不重要,但在逻辑上我正在尝试选择包含范围内的值. 解决方法 如果您从查看整数开始,这更容易考虑.如果你通过[-1,1],你会得到
C 11 std :: uniform_real_distribution(-1,1)给出范围[-1,1)中的数字.
您将如何在[-1,1]范围内获得统一的实际分布? 实际上这可能并不重要,但在逻辑上我正在尝试选择包含范围内的值. 解决方法
如果您从查看整数开始,这更容易考虑.如果你通过[-1,1],你会得到-1,0.因为你想要包含1,你将通过[-1,(1 1))或[-1,2).现在你得到-1,1.
你想做同样的事情,但双打: 从this answer借: #include <cfloat> // DBL_MAX #include <cmath> // std::nextafter #include <random> #include <iostream> int main() { const double start = -1.0; const double stop = 1.0; std::random_device rd; std::mt19937 gen(rd()); // Note: uniform_real_distribution does [start,stop),// but we want to do [start,stop]. // Pass the next largest value instead. std::uniform_real_distribution<> dis(start,std::nextafter(stop,DBL_MAX)); for (auto i = 0; i < 100; ++i) { std::cout << dis(gen) << "n"; } std::cout << std::endl; } (见代码运行here) 也就是说,在所需的值之后找到下一个最大的double值,并将其作为结束值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |