1

好吧,我感到很尴尬,我自己不能得到这个,但是..
我怎样才能减少浮点数的尾数(和指数)位?


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

其他人已经进行了类似的研究([Tong, Rutenbar and Nagle (1998)] 和 [Leeser and Zhao (2003)]),因此应该有一种方法可以做到这一点,尽管“如何”还没有我清楚。

最后一点,我在 Lua 中编程,但我可以很容易地将 C 的东西包含ffi在 LuaJIT 中。

4

1 回答 1

2

要从二进制浮点数x的有效位中删除s位并舍入剩余位,请使用 Veltkamp 算法:

Let factor = 2**s + 1.
Let c = factor * x.
Let y = c - (c-x).

上面的每个操作都应该使用浮点算法进行计算,包括与x具有相同精度的最近舍入。那么y就是想要的结果。

请注意,这会将单个数字四舍五入为较短的有效数字。它通常不会重现具有较短有效位的计算结果。例如,给定ab,以更高的精度计算a •<i>b 然后四舍五入到更低的精度并不总是与以最终精度计算a •<i>b 的结果相同。

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

于 2013-10-17T16:03:28.240 回答