有没有办法在没有警告的情况下统一分发int32_t
?
我在代码中使用了uniform_int_distribution<int32_t>
,但收到警告:
54988961.cpp: In function ‘int main()’:
54988961.cpp:6:64: warning: overflow in conversion from ‘double’ to ‘int’ changes value from ‘1.0e+10’ to ‘2147483647’ [-Woverflow]
std::uniform_int_distribution<std::int32_t> unif(1,std::pow(10,10));
~~~~~~~~^~~~~~~
这正是我的代码:
#include <cmath>
#include <cstdint>
#include <random>
int main() {
std::uniform_int_distribution<std::int32_t> unif(1,std::pow(10,10));
}
答案 0 :(得分:3)
pow(10, 10)
这是10000000000
,一个int32
只能容纳2147483647
(2^31 - 1
)。如果要存储int64_t
,则应使用pow(10, 10)
。
由于您的最小值是1
,所以您也可以选择其未签名的副本。
答案 1 :(得分:1)
对整数参数使用较大的双精度值(pow()
)会在constructor of uniform_int_distribution
中引起此警告。
使用int常量代替。如果您需要的范围不适合int32_t
,请使用int64_t
模板参数。