如何解决在完整的双精度范围std :: uniform_real_distribution始终返回inf
请考虑以下最小示例:
#include <random>
#include <iostream>
int main (const int argC,char* argV[] ) {
std::uniform_real_distribution<double> dist(std::numeric_limits<double>::lowest(),std::numeric_limits<double>::max());
std::random_device gen;
std::cout << dist(gen) << std::endl;
return 0;
}
我希望程序可以打印double
范围内的任何数字。但是,在我的机器上,输出始终为inf
。如果我将double
替换为float
,也是如此。
我可以轻松地想象到std::uniform_real_distribution
的错误实现会如何发生,例如数字绘制间隔的长度不能表示为double
。但是我的问题是,这确实是我的标准库实现中的错误,还是我错过了C ++标准所允许的时间间隔的某些限制?
解决方法
uniform_real_distribution
的要求之一是两个界限之间的差小于keyboardInfo width height
[alphabet de_CH:swiss 1080x667 text actionNone isMultiLine] 1080 667
[alphabet de_CH:swiss 1080x667 text actionNone isMultiLine] 1080 667
[alphabetAutomaticShifted de_CH:swiss 1080x667 text actionNone isMultiLine] 1080 667
[alphabet de_CH:swiss 720x440 text actionNone isMultiLine] 720 440
。因此,您的尝试是错误的。
作为一种解决方法,您可以将其拆分为两个生成器,一个生成器生成负数,一个生成器生成非负数。随机选择两个生成器之一。
请记住,范围的上限不能作为生成的数字返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。