减少尾数位宽
Posted
技术标签:
【中文标题】减少尾数位宽【英文标题】:Reduce mantissa bit-width 【发布时间】:2013-10-17 15:38:52 【问题描述】:好吧,我很尴尬,我自己不能得到这个,但是..我怎样才能减少尾数(和指数)位-with 表示浮点数?
我正在训练一个(卷积)人工神经网络(我正在 FPGA 上实现它),我想研究尾数(和指数)位宽与测试(和训练)精度之间的关系CPU(和 GPU)。下一步是将我的浮点数转换为定点表示(这就是我在 FPGA 上使用的),然后看看情况如何。
其他人已经做过类似的研究([Tong, Rutenbar and Nagle (1998)] 和 [Leeser and Zhao (2003)]),所以应该有一种方法可以做到这一点,尽管“如何”我还不清楚。
最后一点,我正在使用 Lua 进行编程,但我可以轻松地将 C 内容包含在 LuaJIT 的 ffi
中。
【问题讨论】:
【参考方案1】:要从二进制浮点数 x 的有效位中删除 s 位并舍入剩余位,请使用 Veltkamp 算法:
Let factor = 2**s + 1.
Let c = factor * x.
Let y = c - (c-x).
上面的每个操作都应该用浮点算法计算,包括以与 x 相同的精度舍入到最近。那么y就是想要的结果。
请注意,这会将单个数字四舍五入为较短的有效位。它通常不会重现具有较短有效位的计算结果。例如,给定 a 和 b,以更高的精度计算 a•b 然后四舍五入到更小的精度不会总是与以最终精度计算 a•b 的结果相同。
要减小指数范围,您只需将一个值与新指数范围的阈值进行比较,并根据需要声明下溢或上溢。
【讨论】:
非常感谢。这将是很好的考虑,因为现在我只是在点之后的特定位截断我的浮点数 (number:mul(2^b):floor():div(2^b))因为我们仍在使用静态定点数。明年我们可能会切换到动态定点,然后我将处理尾数:)以上是关于减少尾数位宽的主要内容,如果未能解决你的问题,请参考以下文章