IEEE754 -浮点数的表示

1.单精度浮点数

1.1 单精度浮点数的格式

  • 单精度浮点数 采用 32bit来表示一个浮点数,格式如下:
    在这里插入图片描述
  • 如上图所示单精度浮点数由三部分组成:
    • singsingsing:符号位(SSS),0 - 正数; 1:负数
    • exponentexponentexponent:指数位(EEE),共占据 8bit8bit8bit,取值范围为 0−2550-2550255
    • fractionfractionfraction:分数部分(FFF),共占据 23bit23bit23bit

1.2 如何理解exponentexponentexponentfractionfractionfraction

  • exponentexponentexponent
    • 我们知道 单精度浮点数 取值范围为 ±1.17e−38±1.17e^{-38}±1.17e38±3.4e38±3.4e^{38}±3.4e38,如果不考虑符号位也就是 [1.17e−38−3.4e381.17e^{-38} - 3.4e^{38}1.17e383.4e38], 那么可以思考一下为什么取值范围是这么一个数呢?
    • 这就与指数位 exponentexponentexponent 有关,指数位 exponentexponentexponent 表示为 2(E−127)2^{(E-127)}2(E127)exponentexponentexponent8bit8bit8bit ,取值范围为[0−255][0 - 255][0255],其中 全0[0] - 和 全1(255) 用作特殊用途,所以 EEE 取值范围为[1−254][1 - 254][1254], 故指数的取值范围为 [2−126−21272^{-126} - 2^{127}21262127],大约就是[1.17e−38−3.4e381.17e^{-38} - 3.4e^{38}1.17e383.4e38],这也就是 单精度浮点数 的取值范围。
    • 那么指数位exponentexponentexponent 为 0 和 255分别代表什么呢?
    • E=0E = 0E=0:表示 无穷小E=255E = 255E=255:表示 无穷大,对于单精度浮点数 当取值小于2−1262^{-126}2126,则用 无穷小 表示,当取值大于21272^{127}2127 就用 无穷大 表示。
  • fractionfractionfraction
    • 如果只有 exponentexponentexponent ,则只能表示 类似 2−22^{-2}22, 2−12^{-1}21, 202^{0}20, 212^{1}21, 222^{2}22,随着数值的增大可以说毫无精度可言,这个时候就需要 fractionfractionfraction 发挥作用了。
    • fractionfractionfraction23bit23bit23bit, 可表示 2232^{23}223个数,fractionfractionfraction分数分数分数 的意思,例如 F=1F=1F=1 就表示 1/2231/2^{23}1/223, F=2F=2F=2 就表示 2/2232/2^{23}2/223
    • 如何理解这个这种表示方法呢?
    • 对于任何一个数(在浮点数的取值范围之内),都会落在 [2n2^n2n - 2n+12^{n+1}2n+1],fractionfractionfraction 就是表示将[2n2^n2n - 2n+12^{n+1}2n+1] 拆分为 2232^{23}223份,通过所占分数确定浮点数精度。

1.3 公式记录

  • 有了上述解释,下面浮点数的公式也就很好理解了,此处便不过多解释,仅记录一下
  • 通过 S,E,FS, E, FS,E,F 三个参数计算对应浮点数的公式
    (−1)S∗(1+F223)∗2(E−127)(-1)^S*(1+\frac F{2^{23}})*2^{(E-127)}(1)S(1+223F)2(E127)
  • 通过 S,E,FS, E, FS,E,F 三个参数计算对应整形的公式
    F+E∗223F+E*2^{23}F+E223

1.3 举例说明

3.143.143.14 举例:

  • 3.143.143.14 为整数 ,所以 sing=0sing = 0sing=0
  • 21<3.14<222^1< 3.14<2^221<3.14<22,所以 2(E−127)=212^{(E-127)} = 2^12(E127)=21E−127=1E-127 =1E127=1,所以 exponent=128exponent=128exponent=128
  • (3.14−21)/(22−21)=0.57(3.14-2^1)/(2^2-2^1) = 0.57(3.1421)/(2221)=0.57223∗0.57=4781506.562^{23}*0.57 = 4781506.562230.57=4781506.56 四舍五入 fraction=4781506fraction=4781506fraction=4781506
  • 所以3.143.143.14的二进制表示为
    在这里插入图片描述

2. 双精度浮点数

双精度浮点数使用64位表示,格式如下:
在这里插入图片描述

  • 相较于 单精度浮点数 双精度浮点数 exponentexponentexponent 扩展到 11bit11bit11bit, fractionfractionfraction扩展到 52bit52bit52bit,表示范围更大,精度更高,但原理都是一样的,便不过多赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值