定点 Cholesky 算法的优点

Fixed Point Cholesky Algorithm Advantages

我正在开发一些代码,可以从 HW 获取浮点或定点数据。目前我们将其作为浮点数。

底层API都是定点的。所以我们必须将数据作为定点传回。我们使用的算法是 Cholesky。我想知道为什么我们必须为 Cholesky 使用浮点数,而不仅仅是将数据作为定点数获取。这样做有什么好处吗?

我原以为使用浮点数会导致更多的舍入误差。

浮点数相对于定点数的一个优势是您可以表示的数字范围。我对 Cholesky 算法不熟悉,但如果它必须在内部处理非常大和非常小的数字,浮点将提供更准确的结果。

如果使用定点运算,需要确保输入不会导致算法内部饱和或溢出,并将其限制在特定范围内。此外,可能很难定义此范围,尤其是当您有多个输入时。

定点相对于浮点的主要优点是

  1. 用硬件实现就简单多了,

  2. 某些运算是精确的(即不会产生舍入错误):即假设结果不会溢出,即整数的加法、减法和乘法。

  3. 如果你所有的数字都具有相同的大小,你可以通过不需要存储指数来在相同的宽度上获得一些额外的精度:例如32 位与 binary32 single precision.

  4. 中的 24 位

特别是,第 3 点不太可能适用于整个计算阶段的所有数字,尤其是对于 Cholesky 分解等线性代数运算。

另一方面,浮点数还有很多其他优点。

  1. 您可以存储范围更广的范围更广的数字(例如 ~10-38 到 10+38 对于 binary32)

  2. 使用较小的数字时,您不会失去准确性:这对于 multiplication/division 尤其重要,它在整个 Cholesky 计算中使用。

  3. 下溢和溢出问题不大:它们都不太可能发生(由于 1),但在确实发生时也可以更优雅地处理,通过 Inf 和低于正常值与异常或错误结果。

  4. 浮点格式包含稍微小一点的定点格式:即 binary32 包含 24 位定点格式的所有数字,但具有上述所有优点。