3

我有这个看起来像这样的随机浮点函数:

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 应该播种一次......我已经知道,如果你真的想知道,就是我正在做的事情。

谢谢!

4

2 回答 2

4

预期的种子值是无符号整数类型;传递 afloat实际上只是传递了 said 的截断整数值float

您可以从 的签名seed、返回result_type的 以及从的文档中result_type得出这一点:

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

于 2020-09-01T17:26:38.177 回答
2

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

于 2020-09-01T17:28:29.743 回答