我是c++新手,有以下简单的代码片段来探索c++的限制:
int main() {
float x = 2147483000;
int y = static_cast<int>(x);
cout << "x: " << x << ", y: " << y;
}
为什么输出显示我不同x &y,即使浮点值在int限制内,即2147483647
代码结果
x: 2.14748e+09, y: 2147483008
为什么x &y ?
我已经仔细阅读了你的问题。这是一个误解,而不是错误。
之所以会出现这种情况,是因为浮点数有一定的存储精度的能力,如果数字超过7位,它将在7位之后失去精度。由于这个原因,输出不准确或相同。
为什么x &y ?
显示指数范围内的float
的默认转换为显示六位有效数字。
在float
, IEEE-754 binary32常用的格式中,最接近2,147,483,000的两个可表示值是2,147,482,880和2,147,483,008。因此,对于float x = 2147483000;
,一个好的c++实现将把2,147,483,000转换为最接近的float
值2,147,483,008。
然后int y = static_cast<int>(x);
将y
设置为相同的值,2,147,483,008。
当float
x
以默认格式插入cout
流时,使用六位有效数字,生成2.14748•109。
当int
y
插入到流中时,显示其完整值2,147,483,008。
您可以通过请求更高的精度来查看完整值。std::cout << std::setprecision(99) << "x: " << x << ", y: " << y << 'n';
产生" x: 2147483008, y: 2147483008 " .