C++ static_cast Incorrect



我是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。

floatx以默认格式插入cout流时,使用六位有效数字,生成2.14748•109

inty插入到流中时,显示其完整值2,147,483,008。

您可以通过请求更高的精度来查看完整值。std::cout << std::setprecision(99) << "x: " << x << ", y: " << y << 'n';产生" x: 2147483008, y: 2147483008 " .

相关内容

  • 没有找到相关文章

最新更新