浮点数转换为定点数方法

一、浮点数的定点化
浮点数举例:3.125 31.25 312.5类似于这些数字,小数点的位置是浮动,我们称为浮点数。
二、为什么需要将浮点数转换为定点数
提高运算速度;降低功耗。加速器应用等。
三、浮点数转换为定点数的方法
需要定义定点数的小数位占多少位,整数位占多少位。
举例:假设整数位3位,小数位12位,符号位1位。
16位定点数最大数为0111 1111 1111 1111 ,十进制为+32767。
16位定点数最小数为1111 1111 1111 1111 ,十进制为-32768。(为啥是这么多,需要研究数据在计算机内部是如何存储的 ?)
整数位3位,最大表示7;小数位12位,12位小数位每一份表示的值1/4096(量化)。为什么是4096而不是4095,因为数据是从0递增到1111 1111 1111 1111一共4096个数。1111 1111 1111 1111表示的最大数为4095,4095*1/4096=0.999755859375。

3.125表示为定点数是多少呢?
分析:3位整数表示的最大数是7,小数点表示的最大数据近似于1,7+1=8。也就是说使用15位(整数位3位,小数位12位)表示8这个数。把8这个数,用2^15 进行量化,
每一份是8/(2^15)=0.000244140625。那么3.125有多少份?3.125/0.000244140625=12800份。12800即就是得到的定点数。
那么12800定点数如何得到浮点数据呢?
方法一:12800*8/32768=3.125
方法二:12800的二进制位0011 0010 0000 0000。最高为符号位0,整数位011表示3,小数位10 0000 0000=512 小数位用12位表示,每一份是1/4096,512分是512/4096=0.125。3+0.125=3.125。
四、总结
定点数转换为浮点数方法
1.定义位宽。
2.知道定义的位宽表示的最大数据。
3.计算。

五、如果两个浮点数相乘(3.1253.125=9.765625)
1.将两个浮点数转为定点数。
2.2个3位整数位相乘,结果为6位;2个12位小数位相乘结果为24位。相乘完结果是31位。
3.3.125
3.125定点数表示为12800*12800=163,840,000。
4.计算。定点数向浮点数逆运算。
163,840,000的二进制为1001110001000000000000000000,共28位,高2位补0,构成30位。即001001 110001 000000000000000000,高6位是整数位001001表示+9,110001 000000000000000000的 二进制是12845056,24位小数,每一份是1/2^24,12845056份表示的数据是12845056/2的24此方,等于0.765625。所以总的结果是9+0.765625=9.765625.与实际相符合。

你可能感兴趣的:(fpga开发)