C语言float变量精度,float部类的精度究竟是多少

float类型的精度究竟是多少

float类型是32位的

符号位(Sign) : 0代表正,1代表为负

指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

尾数部分(Mantissa):尾数部分

其中指数位为8位,符号位为1位,尾数位为23位。

科学计数法存储的float类型第一位肯定是1,因此有效的位数为24位。

2的25次方-1为33554431;

也就是说其实float存储的数据如果是整数的话那么存储精度范围为0-33554431;

但是为什么

#include "stdio.h"

int main(void)

{

float a;

a=33554431;

}

这个程序在调试的时候,明明给a赋的值是33554431,可是编译器显示的数据确实a的值为33554432

------解决方案--------------------

float.h

...

#define FLT_DIG         6                       /* # of decimal digits of precision */

#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */

#define FLT_GUARD       0

#define FLT_MANT_DIG    24                      /* # of bits in mantissa */

#define FLT_MAX         3.402823466e+38F        /* max value */

#define FLT_MAX_10_EXP  38                      /* max decimal exponent */

#define FLT_MAX_EXP     128                     /* max binary exponent */

#define FLT_MIN         1.175494351e-38F        /* min positive value */

#define FLT_MIN_10_EXP  (-37)                   /* min decimal exponent */

#define FLT_MIN_EXP     (-125)                  /* min binary exponent */

#define FLT_NORMALIZE   0

#define FLT_RADIX       2                       /* exponent radix */

#define FLT_ROUNDS      1                       /* addition rounding: near */

...

------解决方案--------------------

我以前专门研究过浮点数的精度。

IEEE754中规定,浮点数的尾数占用23位,加上最前面隐含的一位,有效精度确实是24位,

也就是说,最大可表示2^24 - 1 而不会有误差。

注意,是2^24 - 1,而不是2^25 - 1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值