浮点数的定点化



FPGA(一般只能处理定点数):浮点数的定点化

浮点数例子 : 2.918 12.918 3.1415926

转成定点数要定义小数需求多少位,整数需求多少位

例:16位的定点数(MAX:16’d32767 MIN:-32768)
3位整数位宽,12位的小数位,最高位的符号位
取低15位,其中第14,13,12位最大能表示7,
小数最大12位能表示的最大精度:1/4096=0.00244140625
(0.00244140625*4095 = 0.999755859375)
极限最大值表示:7.999755859375

说明:
判断能否用12位精度表示(即:无损失定点化),看能否除尽:
比如:12.918
3位整数位宽最大只能表示7 所以整数12需要4位位宽
小数部分0.918 判断:0.918/0.00244140625 = 3760128 所以12位小数位能表示0.918

例:2.918进行定点化的过程:
8/32768 = 0.00244140625(最大精度)
2.918/0.00244140625 = 11952.128 ~=11952 表示2.918定点后的值
0.128表示量化误差

例:3.1415926进行定点化
3.1415926/(8/32768) ~=12868
12868转化为浮点数: 16’d12868 = 16’b0011 0010 0100 0100
其中: 整数部分表示 011 = 3 小数部分表示 0010 0100 0100 = 580
(10进制数580需要转换成小数:580/4096=0.1416015625)
量化误差:0.0000089625

总结:
1.定义位宽
2.表示出最大最小值
3.定点化过程

浮点数的乘法表示(注意相乘后位宽变化):
例:2.918*3.1415926 ~= 11952*12868
浮点结果 : 2.918*3.1415926 = 9.1671672068
定点结果 : 11952*12868 = 153798336 ~= 9.167095184326171875
‭‬
153798336 = 0000 1001 0010 1010 1100 0110 1100 0000‬
整数部分表示: 001001 = 9
小数部分表示: ‭2803392‬/(2^24) = 0.167095184326171875‬

例:正数的定点化
5bit的正数位,8bit的小数位
11.11111定点数的结果

你可能感兴趣的:(FPGA)