统一int32分布

问题描述 投票:1回答:2

有没有办法在没有警告的情况下获得统一的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));
}
c++ uniform-distribution
2个回答
3
投票
pow(10, 10)

这是10000000000int32只能举行21474836472^31 - 1)。如果你想存储你的int64_t,你应该使用pow(10, 10)

由于你的最小值是1,你也可以选择它的无符号对应物。


1
投票

对于整数参数使用大的double值(pow())会在constructor of uniform_int_distribution中引发此警告。

请改用int常量。如果你需要一个不适合int32_t的范围,那么使用int64_t模板参数。

© www.soinside.com 2019 - 2024. All rights reserved.