定点数和浮点数(二)

计算机专业中 “定点数”,是认为小数点隐含在 “数值位的末尾” 和 “符号位与数值位之间”。

按照这种想法,所谓的 “定点数” 只能代表整数和纯小数了。

而常用的 “带小数” 并不包括在内,做而论道对此很不以为然。

实际上,小数点可以隐含在二进制数中的任意一个位置。

这种数据的构成方法,就应该称为【浮点数】才对。

本文重点分析一下计算机专业中的 “浮点数”。

只是这名称,又是名不副实啊!

计算机专业所说的 “浮点数”,小数点位置是很明确的,叫做【定点数】才对。

---------------------

上过中学的人,应该是在初一吧,都学过【科学记数法】

这种方法是把一个位数很多的数字,简单写成:N = ± a × 10^e

式中的 ± 是正负号,也就是正号(+,可省略的)、负号(-)。

式中的 a 是绝对值,是由一位整数和多位小数组成的正数,它是 N 的【有效数字】

式中的 e 是 10 的【指数】,它是一个整数(包括正整数、零和负整数)。

下面是几个科学记数法写法的实例:

 250,314,567,保留三位有效数字,可写成 2.50 × 10^8。

 580,965,432,保留三位有效数字,可写成 5.81 × 10^8。

 0.009,345,9,保留三位有效数字,可写成 9.35 × 10^-3。

能看出来,采用了科学记数法,表达形式就有可能简短一些。

但是,【有效数字】的位数,是预定的。超出预定位数的数字,则需要进行舍入。

那么,使用科学记数法,是有可能带来误差的,特别是有效数字位数较少的时候。

―――――――――――――――――――――

对于二进制数,当然也可使用科学记数法来表示。

比如,十进制数 N = 8031,写成二进制,就是:N = 1 1111 0101 1111B

把小数点左移 12 位,再按照科学记数法,就可以写成:N = 1.1111 0101 1111 × 2^1100

―――――――――――――――――――――

计算机专业所说的 “浮点数” ,就是在计算机中借鉴了 “科学记数法” 的思路。

在 IEEE 754 标准中,一个浮点数包括三个部分:符号S、阶码E 和尾数M

它们在各种类型的浮点数中,所占用的位数,如下所示。

这三个部分的意义如下。

 符号S:以一位二进制数代表数值 N 的正负号。其中以 0 代表正号,1 代表负号。

 阶码E:以移码形式代表数值 N 的指数 e。关系式为 E = e + 偏移量

   式中,单精度浮点数的偏移量是127 = 7FH;

      双精度浮点数的偏移量是1023 = 3FFH;

     扩展精度浮点数的偏移量是16383 = 3FFFH。

 尾数M:这部分是 N 的有效数字中的小数部分,而整数部分在浮点数中隐含存在。

例如,把 N = 1.1111 0101 1111 × 2^1100 写成 32 位浮点数,各部分如下确定:

 S = 0

 E = 1100 + 0111 1111 = 1000 1011

 M = 111 1010 1111 1000 0000 0000

那么,这个浮点数就是:0100 0101 1111 1010 1111 1000 0000 0000 = 45FAF800H

在 80x86 汇编语言中,使用:DD  8031.0,即可定义这个 32 位的浮点数。

―――――――――――――――――――――

按照 IEEE 754 标准,浮点数的绝对值共有四种表示范围。

这四种范围,以 E 和 M 的不同数值进行区分,与 S 无关。

下面以 32 位浮点数进行说明。

1、非规约浮点数

 这部分浮点数的阶码 E 都是 0,而指数 e 则是-126。

 有效数字中隐含的整数部分是 0。

 而尾数 M 则是可以变化的,从 23 个 0,可以变到 23 个 1。

 在这一部分,阶码最小,所以,这部分所表示的就是 0 和 0 附近较小的数值。

2、规约浮点数

 在这一部分中,阶码 E 是 1 ~ 254、指数 e 则是 E-127 =-126 ~ 127。

 有效数字中隐含的整数部分是 1。

 在这一部分,阶码有很大的变化范围,所以,这部分浮点数所能表示的数值,范围也较大。

 也要注意到,规约浮点数的最小值与非规约浮点数的最大值,是平滑过渡的。

3、无穷大

 在这一部分,只有一个表达方式:阶码 E = 255、尾数 M = 0。

 这种形式,只是用来表示 ± ∞

4、非数字

 在这一部分中,阶码 E = 255,尾数 M ≠ 0。(M 可以是很多数值了。)

 这种形式,只是用来表示非数字(NaN)

 当某些计算产生非实数的结果时(如 √-1),这结果,就可以用 NaN 表示。

32 位浮点数的表示方法、表示范围可见下图。

如果有一个 32 位的浮点数 C1BB3333H,它代表的十进制数,是多少呢?

64 位的浮点数 405ED9999999999AH,又代表什么呢?

谁来算一算?

答案,下次再说吧。

本文完

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值