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