C/C++——浮点数相等

float,double分别遵循R32-24,R64-53的标准,

​​他们的比特位数分别是23,52,

即误差在2-23 ,2-52

所以float的10进制精度误差在1e-6,double的10进制精度误差在1e-15 。

所以要判断一个单精度浮点数:则是

if( fabs(f_float) <= 1e-6);

要判断一个双精度浮点数:则是

if( fabs(d_double) <= 1e-15 );

判断两个浮点数相等:

if( fabs(a_float-b_float) <= 1e-6);

if( fabs(x_double-y_double) <= 1e-15);

浮点数表达的有效位数(也就是俗称的精度)和表达范围不是一个意思

经常说什么单精度一般小数点精度是7-8位,双精度是15-16位,到低怎么来的呢?前面说了,单精度数尾数23位,加上默认的小数点前的1位1,2(23+1) = 16777216。关键: 107 < 16777216 < 108,所以说单精度浮点数的有效位数是7-8位,这个7-8位说的是十进制下的,而我们前面说的尾数位数那是二进制下的,需要转换。

又看,双精度的尾数52位存储,2(52+1) = 9007199254740992,那么有1016 < 9007199254740992 < 1017,所以双精度的有效位数是16-17位。

补充:abs与fabs区别

abs 返回整形数据的绝对值。

头文件:#include<math.h>
用 法: int abs(int i);

fabs 返回浮点数据的绝对值。

头文件:#include <math.h>
用法:float fabs(float x);
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值