某同学执行C++代码 cout << ((0.1 + 0.2) == 0.3) 时输出 0 ,下面最可能的原因是( )。
A:C++的 + 运算符在处理小数时存在bug
B:0.1 、 0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差
C:== 运算符不能用于比较浮点数,只能用于整数
D:因为 0.1 + 0.2 的数学结果不等于 0.3
正确答案:B
答案解析
浮点数在计算机中以二进制形式存储,受限于有限位数,某些十进制小数无法精确表示。0.1、0.2和0.3均属于此类情况,其二进制表示存在周期性,只能近似存储。执行加法运算时,两个近似值相加的结果仍是近似值,与另一个近似值比较时,即使数学上相等,也可能因舍入误差导致不等。== 运算符可用于浮点数比较,但结果受精度影响。C++的 + 运算符按IEEE 754标准执行浮点运算,无bug。0.1 + 0.2 的数学结果等于0.3,但计算机中的数值计算基于近似表示,实际参与运算的是这些近似值。
试卷来源:202603 CCF-GESP编程能力等级认证C++二级真题