计算机中浮点数的表示

不通过某种编码,计算机中无法直接存储手写的小数形式的实数–110110.101或规范化的指数形式的实数–1.10110101×2101。小数点前面只有一位非0的整数,就是规范化的指数形式表示的实数;在二进制中,小数点左边的这个非零整数只能是1。

在计算机中,对实数的编码(比如以下所讲的余127码)是以对二进制的规范化的指数形式为基础来进行的。其编码方式是:省略掉规范化的指数形式中的一位整数部分“1”、小数点“.”、乘号“×”、基数2,只保留数的符号(用0表示正数、1表示负数)、尾数(即实数的小数部分)和指数部分。这就必须规定在位串中这三者的位置和各自所占的字节数。

比如,对于–1.10110101×2101这个数,只需存储符号位(负号)、尾数位10110101和指数位101。

此外,指数部分还要变换。因为在计算机中,IEEE(电气和电子工程师协会)745标准规定:用长度为8位的余127码(而不是用补码)来表示(可正可负的)指数部分。

在计算机中通常规定:从左到右采用“符号位(1位)+指数位(8位的‘移码’或称为余127码)+尾数位(23位)”的方式(一共占据4个字节)来表示和存储一个二进制的单精度实数(又称为单精度浮点数)。

这是由IEEE 745标准规定的一种二进制实型数表示法,精度是十进制的6位(见Behrouz  Forouzan等著,刘艺等译《计算机科学导论》,机械工业出版社出版)。大多数计算机制造商都支持这种IEEE 745标准。

【例题3.4】求一个十进制数–41.75的余127码的实数表示法。

1)符号为负,所以最左边符号位S=1(如果是正数,符号位用0表示)。

2)十进制转换为二进制 41.75=(110011.11)2。其中,整数和小数部分分别转换。

3)规范化:(110011.11)2=(1.1001111×2201)(即移动小数点)。

4)指数位的余127码为   E=101+1111111=(10000100)2(即5+127=132)。

5)尾数位为 M=(1001111)2。

6)最终得到:
   1           10000100       10011110000000000000000
   ↑             ↑                                    ↑
符号位(S)           指数位(E 8位)       尾数位(M 23位)

延伸与拓展:

单精度浮点数的取值范围

由上可知,能够表示的最大正数用余127码表示是:
   0   11111111   11111111111111111111111
  =2(11111111–1111111)×1.11111111111111111111111=2128×1.11111111111111111111111
=2105×111111111111111111111111≈3.4×

能够表示的最小正数用余127码表示是:
   0 00000000 00000000000000000000001
   =2–127×1.00000000000000000000001≈1.17×10–38

对于负数情况完全是类似的,绝对值最大的负数是–3.4×,绝对值最小的负数是–1.17×10–38。

单精度浮点数的精度

浮点数的精度取决于它的规范化表示法的尾数部分,与指数位无关。指数位仅决定小数点的位置。尾数部分的位数越多,能够表示的有效数字就越多,精度就越高。

在IEEE 745标准中,单精度浮点数的尾数用23位存储,加上默认的小数点前的1个整数位(该位的值是1)。用24位二进制能够表示的最大十进制正整数是224–1=16777215,所以单精度的浮点型数的精度是十进制的7位。也就是说,只有十进制数值的高7位是准确无误的(严格来说,如果一个十进制数的高8位小于等于16777215,那么这个数的高8位都是准确无误的,否则精度只有7位)。

实数值0.0规定用余127码的全0来表示。

用以上转换方法,规范化指数表示法的0无法用余127码来表示,因为它没有一位非零的整数部分。因此,IEEE 745标准特别规定:用余127码的全0来表示数值0,即0 00000000 000000000000000000000。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值