FPGA基础-定点小数运算

[复制链接]
2660|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 | 显示全部楼层
 楼主| xjsxjtu 发表于 2012-10-17 20:43 | 显示全部楼层
要仔细看
zhoumingzr 发表于 2012-10-29 19:25 | 显示全部楼层
还是= =  稍微看看吧
星星之火红 发表于 2012-10-29 22:41 | 显示全部楼层
谢谢分享
GoldSunMonkey 发表于 2012-11-6 23:13 | 显示全部楼层
谓定点小数,就是小数点的位置是固定的。我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了)。既然没有储存小数点的位置,那么计算机当然就 ...
xjsxjtu 发表于 2012-10-17 20:40
这个还是很好,希望大家一起讨论啊。
梅花望青竹 发表于 2012-11-7 23:02 | 显示全部楼层
看着好乱 ,楼主给捋一捋了
GoldSunMonkey 发表于 2012-11-8 00:24 | 显示全部楼层
看着好乱 ,楼主给捋一捋了
梅花望青竹 发表于 2012-11-7 23:02
是呀,希望哦。
naught 发表于 2012-11-12 14:46 | 显示全部楼层
写的很好 没觉得乱啊...难道是版主已经调过格式了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

328

主题

1073

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部