13.6.2 ==在浮点比较中的含义
在整数中,一般使用==操作符判断两个数是否相等,而且浮点运算中也存在==操作符,那么使用==判断两个浮点数是否相等有问题吗?反汇编下列语句:
- a == b
得到下列x87 FPU代码:- FLD QWORD PTR [EBP-8]
- FCOMP QWORD PTR [EBP-10h]
要想结果是TRUE,a和b在浮点格式的精度限制内必须严格相等。这意味着,一般情形下(0除外),浮点格式中的每一个位都必须相等。如果a和b是float,那么对于一般数而言,上述语句与下列语句等效:
- *(int*)&a == *(int*)&b
由于上一节所述的误差存在,即使是同一意义上的值,由于来源不同(如果来源相同,还需要比较吗?),判断几乎不可能为TRUE。换句话说,在浮点计算中,==的作用是比较两个浮点数是否具有完全相同的格式数据,而不是一般数学或工程意义上的相等。
【责任编辑:
董书 TEL:(010)68476606】