打印

FPGA基础-定点小数运算

[复制链接]
1843|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjsxjtu|  楼主 | 2012-10-17 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谓定点小数,就是小数点的位置是固定的。我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了)。既然没有储存小数点的位置,那么计算机当然就不知道小数点的位置,所以这个小数点的位置是我们写程序的人自己需要牢记的。  先以10进制为例。如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者 0.12+0.34了。所以定点小数的加减法和整数的相同,并且和小数点的位置无关。乘法就不同了。 12*34=408,而1.2*3.4=4.08。这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数点的位置不能动!!怎么解决这个矛盾呢,那就是舍弃最低位。 也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。上面这个例子中,有效位数为2,小数点之后有一位。  现在进入二进制。我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。小数点之后可以有0 - 15位。我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。  Q12的正数的最大值是 0 111 . 111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是 0x7fff / 2^12 = 7.999755859375。对于Qn格式的定点小数的表达的数值就它的整数值除以2^n。在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。  反过来把一个实际所要表达的值x转换Qn型的定点小数的时候,就是x*2^n了。例如 0.2的Q12型定点小数为:0.2*2^12 = 819.2,由于这个数要用整数储存, 所以是819 即 0x0333。因为舍弃了小数部分,所以0x0333不是精确的0.2,实际上它是819/2^12 =0.199951171875。

相关帖子

沙发
atua| | 2012-10-17 20:42 | 只看该作者
看着头疼。。。

使用特权

评论回复
板凳
xjsxjtu|  楼主 | 2012-10-17 20:43 | 只看该作者
:L

使用特权

评论回复
地板
xjsxjtu|  楼主 | 2012-10-17 20:43 | 只看该作者
要仔细看

使用特权

评论回复
5
zhoumingzr| | 2012-10-29 19:25 | 只看该作者
还是= =  稍微看看吧

使用特权

评论回复
6
星星之火红| | 2012-10-29 22:41 | 只看该作者
谢谢分享

使用特权

评论回复
7
GoldSunMonkey| | 2012-11-6 23:13 | 只看该作者
谓定点小数,就是小数点的位置是固定的。我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了)。既然没有储存小数点的位置,那么计算机当然就 ...
xjsxjtu 发表于 2012-10-17 20:40
这个还是很好,希望大家一起讨论啊。

使用特权

评论回复
8
梅花望青竹| | 2012-11-7 23:02 | 只看该作者
看着好乱 ,楼主给捋一捋了

使用特权

评论回复
9
GoldSunMonkey| | 2012-11-8 00:24 | 只看该作者
看着好乱 ,楼主给捋一捋了
梅花望青竹 发表于 2012-11-7 23:02
是呀,希望哦。

使用特权

评论回复
10
naught| | 2012-11-12 14:46 | 只看该作者
写的很好 没觉得乱啊...难道是版主已经调过格式了...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

328

主题

1073

帖子

2

粉丝