寻找将日志转换为8.8定点的良好比例因子

时间:2016-10-12 14:33:01

标签: math fixed-point natural-logarithm

我在(0, 1]

中有一系列数字

我想取这些数字的自然对数,然后存储为8.8 固定点。

我的foruma是K*ln(x) + (1<<16)

但我不确定K的最佳价值是什么。

我的想法是,如果x加倍,那么ln(x)会增加ln(2),所以固定点值应该在固定点(即256)增加1

所以,这意味着K = 256/ln(2)

这有意义吗?

1 个答案:

答案 0 :(得分:1)

x 接近0时,ln( x )将发散到负无穷大。因此,您实际上是在尝试将无限域映射到有限范围。

如果你以线性的方式这样做,你必须在某个时候切断。如果您选择的值太低,那么您所代表的数字就会浪费精确度。如果选择高截止,则会将太多的值限制在范围的最小元素上。如果不了解该点的分布,就很难在这里猜出合适的平衡。

所以也许您可以应用非线性地图而不是您建议的线性地图。像指数函数?这意味着你实际上存储 x 而不是ln( x )。所以我想说如果你想在16位中存储[0,1]的值而没有太多的信息丢失,你只需使用Q0.16,即小数部分的所有数字。对于(0,1),您可以存储1 - x 或为 x = 1执行特殊情况,以便将其编码为0。如果您有Q8。 8个数字,你首先将你的数字乘以2 8 = 256,但如果你有权访问比特表示,那么乘法会浪费时间。

我猜你有理由想要存储对数,所以这个答案可能不是你所希望的。但是,我没有看到解决潜在问题的更简单方法,因此您可能不得不重新考虑一些想法。