嗯,我感到很尴尬,我不能靠自己来做这件事,但是......
如何为浮点数减少尾数(和指数)位?
我正在训练一个(卷积)人工神经网络(我在FPGA上实现它),我想研究尾数(和指数)位宽与测试(和训练)精度之间的关系。 CPU(和GPU)。下一步是将我的浮点数转换为固定点表示(这就是我在FPGA上使用的)并查看内容如何。
其他人已经做过类似的研究([Tong,Rutenbar和Nagle(1998)]和[Leeser and Zhao(2003)]),所以应该有办法做到这一点,尽管'怎么样'我还不清楚。
最后一点,我正在使用Lua进行编程,但我可以很容易地在LuaJIT的ffi
中包含C内容。
答案 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 的结果具有相同的结果。
要减小指数范围,您只需将值与新指数范围的阈值进行比较,并根据需要声明下溢或溢出。