微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std :: mt19937对于相同的第一个浮点数ex1.2,1.5给出相同的随机浮点

如何解决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和1之间的输出

但是我的问题是,当点左侧的数字相同时,当我给输入浮点数时。例如:(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_typethe documentation of result_type派生出来:

result_type-引擎生成的整数类型。如果它不是无符号整数类型,则结果不确定。

,

std :: mt19937的结果类型为std :: uint_fast32_t,这也是要播种的参数类型,因此浮点数将被截断。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。