c++ - std::mt19937 为相同的第一个浮点数 ex(1.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 应该播种一次......我已经知道,如果你真的想知道,这就是我正在做的事情。
谢谢!
解决方案
预期的种子值是无符号整数类型;传递 afloat
实际上只是传递了 said 的截断整数值float
。
您可以从 的签名seed
、返回result_type
的 以及从的文档中result_type
得出这一点:
result_type
- 引擎生成的整数类型。如果这不是无符号整数类型,则结果未定义。
推荐阅读
- python - 如何使用 xpath 或 bs4 从 2 个不同的模板中获取价格?(python,网络抓取)
- ios - 使用字段的输出作为 url
- c - 在 C 中修改文件的文件统计信息
- c# - 使用 C# 正则表达式分别提取文本数量的出现
- angular - 有条件地将 rxjs 数组响应合并到单个数组中
- java - Java RegExp 用于一组单独的数字
- c# - 没有递归的 C# 计数项目
- highcharts - 一页上有不同的 HighCharts 版本
- c# - 在c#asp .net核心中将json反序列化为IEnumerable
- web-services - 地点详细信息 - 符合永久存储在数据库中的属性