==在浮点比较中的含义

在浮点运算中,直接使用==操作符判断两数相等存在问题,因为浮点数的表示存在精度误差。该文解释了浮点数在计算机内部的表示方式,并通过反汇编代码展示了如何精确地进行浮点数比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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。换句话说,在浮点计算中,==的作用是比较两个浮点数是否具有完全相同的格式数据,而不是一般数学或工程意义上的相等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值