为什么C++中的pow()返回一个负数

wil*_*ill 2 c++ cmath pow

pow()<cmath>库中使用,我得到一些数字的负数.

2601*((int)pow(10.0,3*2)) = -1693967296
Run Code Online (Sandbox Code Playgroud)

为什么会这样?是因为int只有-32767到32767之间的范围?还是因为铸造?

Bat*_*eba 5

当您溢出有符号整数类型时,程序的行为是未定义的.

pow(10.0, 3 * 2)不是返回一个负数.那个特殊的重载会返回一个double.您将其转换为int然后将其乘以常量.这太大了,不适合int.您在平台上检查INT_MAX(或等效std::numeric_limits<int>::max())了吗?