13.6.2 ==在浮点比较中的含义

2013-10-07 00:54:31 · 作者: · 浏览: 73

13.6.2  ==在浮点比较中的含义

在整数中,一般使用==操作符判断两个数是否相等,而且浮点运算中也存在==操作符,那么使用==判断两个浮点数是否相等有问题吗?反汇编下列语句:

  1. a == b 
得到下列x87 FPU代码:
  1. FLD     QWORD PTR [EBP-8]  
  2. FCOMP   QWORD PTR [EBP-10h] 

要想结果是TRUE,a和b在浮点格式的精度限制内必须严格相等。这意味着,一般情形下(0除外),浮点格式中的每一个位都必须相等。如果a和b是float,那么对于一般数而言,上述语句与下列语句等效:

  1. *(int*)&a == *(int*)&b 
由于上一节所述的误差存在,即使是同一意义上的值,由于来源不同(如果来源相同,还需要比较吗?),判断几乎不可能为TRUE。换句话说,在浮点计算中,==的作用是比较两个浮点数是否具有完全相同的格式数据,而不是一般数学或工程意义上的相等。
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节