为什么能精确表示的浮点数有效位数是7位

首先明确,7位有效位是整数部分和小数部分位数的和。例如:

float a=61.420001f。打印输出a=61.420002(62.420001机器无法表示,会自动向最近的能表示的数舍入成61.420001)  

(整数部分2位+小数部分6位=8位>7位,所以不能精确表示)

为了深入理解原理,我们首先要了解浮点数在计算机内的表示。在计算机内,浮点数是以32位二进制数来存储表示的,其中32位分为符号位(1位)、阶码(8位)和尾数(23位)三个部分组成,参考计算机组成原理教材,格式如下,:

符号位          阶码          尾数

1位                8位           23位

比如130.0可表示为:130.0=1000  0010B=1.000  0010*(2^7)  //都要转化为1.xxx*(2^yy)这种形式

符号位(正负号)                  阶码(指数7+127)                                            尾数(小数部分) 

0                                             1000 0110                                                        0000 0100 0000 0000 0000 000

从浮点数二进制表示格式可以知道,尾数部分表示的是23位效位数,因为23位尾数表示的是小数点右边的数,小数点左边是默认是1,所以一共能表示24位有效数,

      而 2^(24) = 16777216,转化为十进制10^7 < 16777216 < 10^8,所以只能精确表示7位。

注意事项:以上只能说明超过7位一定不能精确表示,而小于7位时有可能被精确表示,为什么这么说,比如0.1就不能被精确表示,这是因为浮点数表示的并不是连续的数,而是离散的数。

以上纯属个人见解,还有些东西因为解释起来太复杂就所以就没说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值