1

有没有办法在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));
}
4

2 回答 2

3
pow(10, 10)

也就是说10000000000,一个int32只能持有2147483647( 2^31 - 1)。如果int64_t您希望能够存储您的pow(10, 10).

由于您的最小值是1您也可以选择未签名的对应项。

于 2019-03-04T18:09:35.183 回答
1

对整数参数使用较大的双精度值 ( ) 会在 的构造函数中pow()导致此警告。uniform_int_distribution

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

于 2019-03-04T18:11:13.437 回答