提问人:juco 提问时间:12/14/2022 更新时间:12/15/2022 访问量:217
C++ static_cast不正确
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 位小数,它将在第 7 位数字之后失去其精度。由于这个原因,输出不准确或相同。
评论
float
float
为什么它对 x 和 y 显示不同的值?
用于显示指数的范围内的显示的默认转换是显示六位有效数字。float
在通常用于 IEEE-754 二进制32 的格式中,最接近 2,147,483,000 的两个可表示值是 2,147,482,880 和 2,147,483,008。因此,对于 ,一个好的 C++ 实现会将 2,147,483,000 转换为最接近的值 2,147,483,008。float
float x = 2147483000;
float
然后设置为相同的值 2,147,483,008。int y = static_cast<int>(x);
y
当 以默认格式插入到流中时,将使用六位有效数字,产生 2.14748•109。float
x
cout
当 插入到流中时,将显示其完整值 2,147,483,008。int
y
您可以通过请求更高的精度来查看完整值。 生成“x:2147483008,y:2147483008”。std::cout << std::setprecision(99) << "x: " << x << ", y: " << y << '\n';
评论
float