有没有办法在没有警告的情况下获得统一的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));
}
pow(10, 10)
这是10000000000
,int32
只能举行2147483647
(2^31 - 1
)。如果你想存储你的int64_t
,你应该使用pow(10, 10)
。
由于你的最小值是1
,你也可以选择它的无符号对应物。
对于整数参数使用大的double值(pow()
)会在constructor of uniform_int_distribution
中引发此警告。
请改用int常量。如果你需要一个不适合int32_t
的范围,那么使用int64_t
模板参数。