定点数和浮点数(五)

在前面已经说明了,科学记数法的形式是:N = ± 绝对值 × R^e

把这种形式引入到计算机中,就成了 “浮点数”。

一个浮点数,有三个组成部分:S、E 和 M。

每个部分,都是定点数,而且,也都是整数。

浮点数的运算,实际上,都是整数之间的计算。

而且,也都是【无符号数】的计算。

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

近来,看到不少的网文,充斥了原码(及补码)的乘除法,小数的乘除法等等。

一篇一篇的,都是满嘴的谎言!

其根源,好像都是来自于《计算机组成原理》课本。

实际上,计算机只有 1 0 两个代码,并没有小数点。

任何数字,存入到计算机中,都只有二进制数了。

小数点,则需要你自己处理。

也就是说,在计算机中,只有整数。

即使是负数,用到了补码,也是用正整数存放的。

(关于补码,可参考做而论道以前的博文。)

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

下面,拿两个简单的数字,介绍一下浮点数的加减运算。

  N1 = -100.625、N2 = 100.5。

这两个数相加,之和,应该是:N1 + N2 = -0.125。

计算机用浮点数,应该怎么算呢? 且往下看。

先把这两个数字,以 32 位浮点数存入计算机。

这两个浮点数的二进制形式如下。

 N1:1100 0010 1100 1001 0100 0000 0000 0000

 N2:0100 0010 1100 1001 0000 0000 0000 0000

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

许多人都说:浮点数的尾数(M),是 “纯小数”。

其实,这是误解。

如果 N1 = 100625,这是一个纯粹的整数,其尾数也是这样的。

此时的 N1,根本就没有小数部分,尾数怎么可能是小数?

实际上,任何浮点数的尾数(M),都是正整数。

数值 N 的 “整数部分和小数部分” 的信息,是存放在阶码(E)之中的。

即使 N 具有小数部分,也与尾数(M)毫无关系。

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

浮点数加减的运算步骤如下。

1. 在尾数(M)的前面,补上隐含的值。

 如果 E = 0,就补上 0;如果 E > 0,就补上 1。

 此时,就凑齐了:数值 N 的绝对值

 N1 的绝对值:100 1001 0100 0000 0000 0000

 N2 的绝对值:100 1001 0000 0000 0000 0000

2. 对阶。

 将阶码较小的浮点数的绝对值右移。

 每右移一位,阶码(E)就加一。

 直至两个阶码相同。

 对于 N1、N2,它们的阶码是相同的,这一步,就算结束了。

3. 计算。

 即将两个浮点数的绝对值,相加减。

 这一步,就是两个定点整数的运算了。

 如果有负数或减法,就可以使用补码来做。

 加减完成后,还应把结果再写成浮点数的绝对值的形式。

 那么,经过计算,N1 + N2 的绝对值就是:

  0000 0000 0100 0000 0000 0000

 N1 + N2 的符号位1,另外存放。

4. 对运算结果进行规格化。

 即在运算结果的绝对值中,从左向右,查找为 1 的位。

 将绝对值左移,每移动一位,阶码(E)减一,直至首位为一。

 那么,把运算结果的绝对值左移了 9 位后,就成了这个样子:

  100 0000 0000 0000 0000 0000 0。

 将首位的 1 隐去,剩下的,就是 23 位的尾数(M):

  00 0000 0000 0000 0000 0000 0。

 此时的阶码(E),是在原来的基础上,减去了 9,即为:

  100 0010 1 - 0000 1001 = 0111 1100

 至此,就得出了 N1 + N2 的浮点数运算结果:

  1 0111 1100 00 0000 0000 0000 0000 0000 0。

  (写成 16 进制,就是:BE 00 00 00。)

 这个浮点数所代表的数值,就是:-0.125

这正是 N1 + N2 的结果,运算结束。

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

上面,介绍了一个浮点数加减运算的过程。

虽然没有涉及到 “非规约数、无穷大、非数字” 等等,但是,也够看的了。

由此例可知,浮点数的运算,每一步,都是用整数进行的。

数值 N 虽然具有小数部分,但是在运算过程中,并没有任何小数出现。

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

浮点数的运算,都不涉及小数,定点数的运算,就更不涉及小数了。

只有在屏幕上显示结果的时候,才会用到【小数点】。

也只有在显示结果的时候,才会涉及到二进制数的【整数部分、小数部分】。

如果,讨论计算机内部的计算过程,根本就不必说什么【小数和小数点】。

现在,许多大学的教材,都是乱写一些根本就不存在的东西。

也不知道,这些教授想干什么!

本文完

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值