题目:下列代码中,输出结果是( )
#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。
- 所以
总结:这道题主要考查了浮点数在计算机中的存储精度问题,不能简单地像数学运算那样直接比较浮点数是否相等,因为计算机对浮点数的存储和运算存在精度限制。