论述:定点小数

论述:定点小数

更新历史
20190323:

  1. 首次发布

现在有一个问题:

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,可以将它乘上 S N S^N SN后得到一个整数B。我们将整数B称为小数A对应的定点小数。

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

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

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

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

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

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

  • 可以使用定点小数,将小数的存储和运算,转化为整数的存储和运算。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值