减少尾数位宽

时间:2013-10-17 15:38:52

标签: floating-point neural-network fixed-point exponent mantissa

嗯,我感到很尴尬,我不能靠自己来做这件事,但是......
如何为浮点数减少尾数(和指数)位?


我正在训练一个(卷积)人工神经网络(我在FPGA上实现它),我想研究尾数(和指数)位宽与测试(和训练)精度之间的关系。 CPU(和GPU)。下一步是将我的浮点数转换为固定点表示(这就是我在FPGA上使用的)并查看内容如何。

其他人已经做过类似的研究([Tong,Rutenbar和Nagle(1998)]和[Leeser and Zhao(2003)]),所以应该有办法做到这一点,尽管'怎么样'我还不清楚。

最后一点,我正在使用Lua进行编程,但我可以很容易地在LuaJIT的ffi中包含C内容。

1 个答案:

答案 0 :(得分:2)

要从二进制浮点数 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 的结果具有相同的结果。

要减小指数范围,您只需将值与新指数范围的阈值进行比较,并根据需要声明下溢或溢出。