题目:下列代码中,输出结果是( )
#include<iostream>
using namespace std;
int main()
{
double a = 0.9;
double b = 1.0;
if (((b - a) == 0.1))
{
cout << "Equal" << endl;
}
else
{
cout << "Not equal" << endl;
}
}
A.Equal
B.Not equal
C.程序不能正确执行
D.没有输出
解答
- 分析浮点数的存储特性:
- 在计算机中,浮点数(如
double类型)是以二进制形式存储的。由于浮点数的表示存在精度限制,很多十进制小数无法精确地用二进制表示。 - 例如,
0.1在十进制中是一个简单的小数,但它在二进制中是一个无限循环小数((0.0001100110011\cdots_2))。同样,0.9和1.0转换为二进制后在存储时也会有精度问题。
- 在计算机中,浮点数(如
- 分析代码中的比较操作:
- 代码中定义了
double a = 0.9;和double b = 1.0;,然后进行(b - a) == 0.1的比较。 - 由于
0.9、1.0以及0.1在计算机中存储都存在精度问题,b - a的结果在计算机中存储的二进制值并不一定与0.1存储的二进制值完全相同。 - 尽管从数学上看
1.0 - 0.9应该等于0.1,但在计算机实际存储和运算中,因为精度问题,它们的二进制表示有差异。
- 代码中定义了
- 得出结论:
- 所以
(b - a) == 0.1这个比较结果为假,程序会执行else分支。 - 因此,输出结果是
Not equal,答案选B。
- 所以
总结:这道题主要考查了浮点数在计算机中的存储精度问题,不能简单地像数学运算那样直接比较浮点数是否相等,因为计算机对浮点数的存储和运算存在精度限制。
2001

被折叠的 条评论
为什么被折叠?



