IEEE 754标准——float类型的隐含位

Float类型在内存中的储存形式

  根据IEEE 754标准, float 类型通常使用 32 位来在内存中表示一个浮点数。在这32位中,有三个主要部分:符号位,指数部分和位数部分。

存储布局

  符号位(S)用于表示数值的正负,位于第一位。指数部分(E)用于表示数值的大小,位于第二到第九位。尾数部分(M)用于表示实际的二进制小数部分,简单来讲就是浮点数有效数字部分用二进制的形式来储存, 

//可以这样表示
S | EEEEEEEE | MMMMMMMMMMMMMMMMMMMMMMM

具体解释

1.符号位(S)

  如果符号位为0,表示这个浮点数为正数。如果符号位为1,表示这个浮点数为负数。

2.指数部分(E)

  小学数学,小数点向左移乘以10的负次幂,小数点向右移乘以10的正次幂。内存中的指数部分就是这个作用,只不过在二进制中是乘以2的N次幂。8位所以它的范围就是0~2^{8},这不都是正数吗?只有正次幂啊,那小数点怎么向左移呢?IEEE运用一个巧妙的办法解决了,把指数部分设置成偏移值,实际指数值E_{real} = E^{} - 127。

3.尾数部分(M)

  尾数部分实际上存储的是二进制小数部分的“规范化”值。规范化意味着尾数部分总是以一个隐含的1开头,即1.M,其中M是尾数部分。对于非规范化的值(指数部分全为0),没有隐含的1。

隐含的“1

规范化数与非规范化数

1.规范化数

  大部分数字都是规范化数,在IEEE 754 标准中规范化数是指能表示成特定形式的数,它的二进制形式最高位总是1。对于单精度浮点数来说,它的形式是1.M。

2.非规范化数

  非规范化数非常少,它们的指数部分全为0,这意味着它们值非常非常小,小到平时不太可能用到。它的范围接近0 00000000 00000000000000000000001 ~ 0 00000000  1111111111111111111 1111。

为什么会有隐含的“1”

1.节省储存空间,提高精度

  由于大部分浮点数数总是以1开头,所以IEEE 754 认为没有必要在单独分内存来存储这个1,于是就通过次规定该1位隐含值(不占用内存)。这也意味着尾数部分可以表示24位的有效数字,但只需要储存23位。

2.浮点数的唯一性

  如果没有隐含的1,那么浮点数就会有多种表示方式,例如,一个数可能表示位0.1011 * 2^{1}和1.011 * 2^{0}。这种不唯一性会导致数值运算和比较中的混淆。

3.历史发展

  在早期的计算机设计中,不同的机器对浮点数有不同的表示方法。IEEE 754 标准的制定是为了统一浮点数的表示,以解决跨平台计算时的兼容性问题。规范化和隐含的1是这一标准化过程中的重要组成部分。这些规定是基于广泛的计算机工程实践和对精度、效率的平衡考虑而制定的,旨在提高浮点数的计算效率和精度,同时减少存储需求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值