论述:定点小数

现在有一个问题:

Question 1

有一组十进制非负小数需要存储:
0.00
0.12
3.57
1.83
而存储介质中,每个数据只能按3位的非负整数(0~999)存储,该怎么办?

一个简单易行的解决方法就是,将上述的数据都乘上100后再存储,即:

Answer 1

实际存储的数据为:
000,	对应	0.00
012,	对应	0.12
357,	对应	3.57
183,	对应	1.83
将数据从存储介质中读出来的时候,只需要除以100,就能得到原始的那组小数。

现在,让我们把问题修改那么一点点:

Question 2

有一组无符号二进制小数需要存储:
0.00b
0.10b
1.01b
1.11b
而存储介质中,每个数据只能按3bit的无符号整数存储,该怎么办?

仔细观察就能发现,与 Question 1 相比,Question 2 从十进制变为了二进制,从一组十进制的小数变为了一组二进制的小数,仅此而已。那么,我们可以套用 Question 1 的解决方法,将上述的数据都乘上4后再存储,即:

Answer 2

实际存储的数据为:
000,	对应	0.00b
010,	对应	0.10b
101,	对应	1.01b
111,	对应	1.11b
将数据从存储介质中读出来的时候,只需要除以4,就能得到原始的那组小数。

至此,机智的你应该已经发现了博主要讨论的东西了,没错,那就是"定点小数"。将前面的内容归纳、升华一下,可以给出"定点小数"的定义:

  • 在S进制下,对于小数部分位宽为N的一个小数A,可以将它乘上SNS^NSN后得到一个整数B。我们将整数B称为小数A对应的定点小数。

定点小数具有如下的特点:

  • 它是整数,但用来表示小数
  • 需要知道小数部分的位宽,才能明确定点小数所对应的实际小数
  • S进制下的定点小数,乘以或除以S的操作,与移位操作等效
    • 十进制下:定点小数0099010_{10}10​,乘以10则变成0990010_{10}10​,除以10则变成0009910_{10}10​
    • 二进制下:定点小数001102_{2}2​,乘以2则变成011002_{2}2​,除以2则变成000112_{2}2​

那么,定点小数有什么用呢?其作用如下:

  • 将"存储小数"转化为"存储整数"
  • 将"小数运算"转化为"整数运算"
    • 只要知道参与运算的各个定点小数的小数部分位宽,就能知道运算结果的小数部分位宽

在硬件计算中,常常会遇到"计算单元只支持整数的加法和乘法运算"这样的情况。在这种情况下,要使用现有的计算单元完成小数的加法和乘法运算,我们可以采用定点小数的方案,简单而又有效。

用一句话将本论述归纳总结一下,那就是:

  • 可以使用定点小数,将小数的存储和运算,转化为整数的存储和运算。

定点小数和定点整数

定点表示即约定机器数中的小数点位置是固定不变的。根据小数点固定的位置不同可以分为定点小数和定点整数。

在这里插入图片描述

 

本文链接:https://blog.csdn.net/qq_38791897/article/details/88766388

https://blog.csdn.net/starter_____/article/details/95235180?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

转载自:https://blog.csdn.net/qq_38791897

你可能感兴趣的:(软考)