浮点数判断为0或者相等

浮点数不能像整形那样直接用 if(a==b) 这样来进行条件判断,因为浮点数用float或者double是不精确的表示。

float精确到小数点后6位

double精确到小数点后15位

所以,也就是说,如果一个float小于0.000001,我们就不知道是否为有效的了,也可以认为近似为0了。

同理一个double的有效范围为1e-15,小于1e-15的double类型我们就可以认为近似为0


在代码里,我们就可以像下面这样通过对浮点数取绝对值后和1e-6或者1e-15来比较判断是否为0


float f1=0;

doube d2=0;


if(fabs(f1) < 1e-6)

{//0

}


if(fabs(d2) < 1e-15)

{//0

}

我们判断两个浮点值是否相等就可以通过相减取绝对值的方式来做了。

float  f2=0,f3=0;

if(fabs(f2-f3) < 1e-6)

{//0

}


-------------------------------------------------------------------导致以上的原因呢?就是下面这样---------------------------------------------------------------

另外在计算机中存储float和double按照下面方式。

float:

1bit(符号位)

8bits(指数位)

23bits(尾数位)

double:

1bit(符号位)

11bits(指数位)

52bits(尾数位)



1、范围

所以float有8bit指数 最大为2^128

而double有11bit指数 最大为2^1024

2、有效位

尾数位决定了有效位

float:   2^23 = 8388608,一共7位,所以取6位有效
double:  2^52 = 4503599627370496,一共16位,取15位有效。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值