我正在开发一些代码,可以在浮点或定点从HW获取数据。目前我们将其作为浮点数。
低层API都处于固定点。所以我们必须将数据作为固定点传回。我们使用的算法是Cholesky。我想知道为什么我们必须使用Cholesky的浮点数,而不仅仅是将数据作为定点。这样做有什么好处吗?
我原本以为使用浮点会导致更多的舍入错误。
答案 0 :(得分:3)
定点超浮点的主要优点是
在硬件中实现起来要简单得多,
某些操作是精确的(即不会出现舍入错误):即加,减,乘以整数,假设结果不会溢出。
如果您的所有数字都具有相同的幅度,则可以通过不需要存储指数来获得相同宽度的一些额外精度:例如在binary32 single precision中的32位与24位。
特别是,在整个计算阶段,所有数字都不太可能出现第3点,特别是对于Cholesky因子分解等线性代数运算。
另一方面,浮点还有许多其他优点。
您可以在更广泛的范围内存储更多种类的数字(例如~10 -38 至10 +38 for binary32)
使用较小的数字时,您不会失去准确性:这对于乘法/除法尤其重要,它在整个Cholesky计算中使用。
下溢和溢出不是问题:它们都不太可能发生(由于1),但是当发生这种情况时,通过Inf
和次正常与异常或错误的结果。
浮点格式包含略小的定点格式:即binary32包含24位定点格式的所有数字,但具有上述所有优点。
答案 1 :(得分:1)
浮点数超过定点的优点是您可以表示的数字范围。我不熟悉Cholesky算法,但如果它必须在内部处理非常大和非常小的数字,浮点将提供更准确的结果。
如果使用定点运算,则需要确保输入不会导致算法内的饱和或溢出,并将其限制在特定范围内。此外,可能很难定义此范围,尤其是如果您有多个输入。