如何解决std :: mt19937对于相同的第一个浮点数ex1.2,1.5给出相同的随机浮点
float randomFloat(float input)
{
std::mt19937 mt;
mt.seed(input);
std::uniform_real_distribution<float> dt(-1,1);
return dt(mt);
}
但是我的问题是,当点左侧的数字相同时,当我给输入浮点数时。例如:(1.2,1.52,1.658,1.01 ...)随机浮点数将给出相同的值,(为英语不好而道歉)
因此,一个输入1.5和另一个输入1.2将给出相同的返回值,而一个输入1.5和另一个输入2.5将给出不同的值。我该如何解决?
请紧记,我并不是想精确地获取randomFloat,我的问题要复杂一些,但是如果我可以针对此特定问题寻求帮助,那么其他所有问题都将变得很容易理解,我在说的原因这是因为我不想回答告诉我使用random_device的问题,或者应该将mt播种一次……我已经知道,this是您真正想知道的事情。>
谢谢!
解决方法
期望的种子值是无符号的整数类型;传递float
实际上只是传递所说的float
的截断整数值。
您可以从signature of seed
,which returns result_type
和the documentation of result_type
派生出来:
,
result_type
-引擎生成的整数类型。如果它不是无符号整数类型,则结果不确定。
std :: mt19937的结果类型为std :: uint_fast32_t,这也是要播种的参数类型,因此浮点数将被截断。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。