精度损失 - 使用 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
或直接忽略警告。
我正在尝试将 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
或直接忽略警告。