【发布时间】:2013-02-19 07:34:00
【问题描述】:
我正在编写一个算法来找到一个 nxn 矩阵的逆矩阵。让我们以 3x3 矩阵的具体情况为例。
当您手动反转矩阵时,您通常会查找包含一个或多个零的行/列,以加快行列式计算,因为它消除了您需要计算的项。
按照 C/C++ 中的这个逻辑,如果你用一个或多个零标识一行/列,你最终会得到以下代码:
float term1 = currentElement * DetOf2x2(...);
// ^
// This is equal to 0.
//
// float term2 = ... and so on.
由于编译器无法知道currentElement 在编译时为零,因此无法将其优化为float term = 0; 之类的东西,因此浮点乘法将在运行时执行。
我的问题是,这些零值是否会使浮点乘法更快,或者无论currentElement 的值如何,乘法都会花费相同的时间?如果在运行时无法优化乘法,那么我可以删除搜索包含零的行/列的逻辑。
【问题讨论】:
-
取决于 FPU 设计。有些会更快,有些不会。
-
为什么不做个测试看看?
标签: c++ c optimization floating-point multiplication