1.定点数Q12的含义:小数点之后有12位叫做Q12格式的定点小数
2.定点数用Q12来计算2.1 * 2.2,先把2.1 2.2转换为Q12定点小数
2.1 * 2^12 = 8601.6 = 8602
2.2 * 2^12 = 9011.2 = 9011
(8602 * 9011) >> 12 = 18923
18923的实际值是18923/2^12 = 4.619873046875 和实际的结果 4.62相差0.000126953125,对于一般的计算已经足够精确了
3.定点数二进制小数如何转换为十进制数
0.11101
1×2-1+1×2-2+1×2-3+1×2-5=0.90625
4.定点数加减法运算
如果两个小数点的位置不相同,比如说分别为0△0101、00△110,代表的十进制数分别是0.3125和0.75——二进制规则逐位相加结果为01011。如果小数点位置与第一个数相同,则表示0.6875。如果小数点位置与第二个数相同,则表示1.375,显示结果是不正确的。为了进行正确的运算,需要在第二个末位补0,为00△1100,两个数再直接相加,得到“01△1001”,转换成十进制数为1.0625,得到正确的结果综上所述,如果对于未对齐的二进制数,需要补齐最低位使得小数位的位宽相同才能进行加减法运算;如果将数据均看成无符号整数,则不需要进行小数位扩展,因为Verilog HDL编译器会自动将参与运算的数据以最低位对齐进行运算;
5. 十进制小数 转 二进制小数
0.1 * 2 = 0.2 →取整数部分0
0.2 * 2 = 0.4 →取整数部分0
0.4 * 2 = 0.8 →取整数部分0
0.8 * 2 = 1.6 →取整数部分1
0.6 * 2 = 1.2 →取整数部分1
0.2 * 2 = 0.4 →取整数部分0
0.4 * 2 = 0.8 →取整数部分0
0.8 * 2 = 1.6 →取整数部分1
0.6 * 2 = 1.2 →取整数部分1
可以看到0.1转2进制不管怎么乘2结果小数位不可能为0,是一个无限循环小数,只能截取一部分。
我们再将获得的整数部分组合起来,
二进制为:0.00011001100110011001101(截取23位)