精度损失 - 使用 srand 时发出警告

Loss of precision - warning with usage of srand

我正在尝试将 srand 与时间一起用于随机值。如果我看 srand 函数需要 unsigned int - 但如果我们用 time 初始化它,它似乎有 long long 值 - 所以编译器一直抱怨精度丢失警告。有更好的做事方式吗?

// srand definition
void srand (unsigned int seed);
// using srand with time to seed random value
srand(time(NULL));

警告 712:(信息 -- 精度损失(arg. 1)(long long 到 unsigned int))

如果您使用的是 C++,请查看 <random>。它有更好的 PRNG。

如果您限于 rand,在这种情况下,您可以忽略警告,或者更好的是,通过显式转换 (unsigned)time(NULL).[= 告诉编译器您不关心13=]

用简单的逻辑来说,当您使用 long long 而不是 unsigned int 时会丢失精度并且编译器会为此发出警告,这是很合理的。 (long long可以表示更大范围的数字,可以查看here区别)。

如果您认为尽管丢失了您的需求,您可以将其转换为 unsigned int 或直接忽略警告。