逆定点数(数字^-1)

信息处理 固定点 转换
2022-02-13 09:58:33

有人可以提供一种反转随机定点数的方法。我有正负浮点数作为输入,应该转换为定点然后反转。

例如 1/0.2453,其中浮点 0.2453 转换为 Q18 定点格式,然后反转为 4.07664。非常感谢!!

1个回答

在进行定点算术时,首先必须了解的是,在基本级别上,它是应用了一些比例因子的整数算术。也许只应用了一个比例因子。这个比例因子与二进制点的位置直接相关。除非芯片是定点 DSP 或类似芯片,否则二进制点是隐含的,而不是明确的。它和相关的比例因子只存在于程序员的脑海中。CPU 只认为它正在处理整数。

例如,一个无符号的定点 16 位格式,我称之为“1.15”或者,也许是“Q1.15”(我认为“Q”是多余的,并且像“Q16”这样的符号不能提供足够的信息) 在二进制点的左侧有 1 位,在右侧有 15 位。但是这 16 位单独存在,是一个整数。该无符号整数的范围是但隐含的无符号定点数的范围 = 1.99996948242188 。n0n2161n^0n^2215

两者的关系是:

n^=n215
n=n^215

请注意,指数中的“15”(或“-15”)与“Q1.15”符号中的“15”相同。比例因子与二进制点右侧的隐含位数直接相关。

如果它是一个 16 位有符号的,我们可以使用“s.15”或“Qs.15”符号来表示格式,有符号整数的范围是并且隐含的定点值的范围是 = 0.99996948242188 。n215n+2151n^1n^1215

两者的映射同上:

n^=n215
n=n^215

唯一的区别是在您的 C 代码中使用unsigned intvs .。int它们在二进制点的右侧都有相同的位数,并且它们都具有相同的映射。

现在,当 C 对这些值进行加法或减法或乘法或除法时,它正在对这些值的整数表示进行操作。但整数表示与您的隐含值相同,但比例因子除外。

所以如果你想用一些分子除以一些分母得到一些商,你必须首先确定所有三个数字的范围是什么。然后确定每个数字的二进制点右侧有多少位。然后将这些数字映射到它们的整数值,并确定整数商调整为表示之前的范围。会有一个比例因子会出现在你身上(2 的幂),这意味着n^d^q^n^d^ndq^nd(最有可能的n) 在整数除法完成之前。