gpt4 book ai didi

c++ - std::mt19937 为相同的第一个 float ex(1.2, 1.5) 给出相同的随机 float

转载 作者:行者123 更新时间:2023-12-01 14:14:54 54 4
gpt4 key购买 nike

我有一个看起来像这样的随机 float 函数:

float randomFloat(float input)
{
std::mt19937 mt;
mt.seed(input);
std::uniform_real_distribution<float> dt(-1,1);

return dt(mt);
}

如您所见,该函数接受一个输入并返回一个介于 -1 和 1 之间的输出

但我的问题是,当我给出输入 float 时,如果点左侧的数字相同。示例:(1.2, 1.52, 1.658, 1.01...) 随机 float 将给出相同的值,(为糟糕的英语道歉)

因此输入 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 - The integral type generated by the engine. Results are undefined if this is not an unsigned integral type.

关于c++ - std::mt19937 为相同的第一个 float ex(1.2, 1.5) 给出相同的随机 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63692572/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com