C++ 浮点数的大小比较


一、C++的精度损失

浮点数的存储格式:

符号位指数位尾数位
sign bitExponentMantissa

浮点数分为单精度float和双精度double,32位和64位系统存储位数略有不同。

相对于二进制存储小数,假设只用1位小数存储:
则精度为0.5:
.1 表示 0.5
.0 表示 0.0

以此类推:

精度 e = 1 2 n 精度 e ={1 \above{1pt} 2 ^ n } 精度e=2n1

二、浮点数比较

#include <iostream>
#include <algorithm>

int main()
{
	double a = 1.1;			 //1.1000000000000001
	double b = 1.1 + 1e-16;  //1.1000000000000001,精度损失
	bool ret = std::abs(a - b) < std::abs(std::min(a, b)) * std::numeric_limits<double>::epsilon(); //true
}

三、总结

浮点数的精度损失可以根据实际情况自定义,但不可使用==来比较两个浮点数是否相等。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值