gpt4 book ai didi

c++ - 可以在运行时优化浮点零乘法吗?

转载 作者:太空狗 更新时间:2023-10-29 19:37:58 24 4
gpt4 key购买 nike

我正在编写一种算法来查找 nxn 矩阵的逆矩阵。让我们以 3x3 矩阵为例。

当您手动求逆矩阵时,您通常会寻找包含一个或多个零的行/列以加快行列式计算速度,因为它消除了您需要计算的项。

按照 C/C++ 中的这一逻辑,如果您识别具有一个或多个零的行/列,您将得到以下代码:

float term1 = currentElement * DetOf2x2(...);
// ^
// This is equal to 0.
//
// float term2 = ... and so on.

由于编译器无法知道 currentElement 在编译时将为零,因此无法将其优化为类似 float term = 0; 的内容,因此浮点乘法将为在运行时执行。

我的问题是,这些零值会使浮点乘法更快,还是无论 currentElement 的值如何,乘法都将花费相同的时间?如果无法在运行时优化乘法,那么我可以删除搜索包含零的行/列的逻辑。

最佳答案

编译器不允许对此进行优化,除非计算是微不足道的(例如,所有常量)。

原因是,DetOf2x2 可能返回 NAN 浮点值。将 NAN 与零相乘不会返回零,而是再次返回 NAN。

您可以在这里使用这个小测试自己尝试一下:

int main (int argc, char **args)
{
// generate a NAN
float a = sqrt (-1);

// Multiply NAN with zero..
float b = 0*a;

// this should *not* output zero
printf ("%f\n", b);
}

如果你想优化你的代码,你必须自己测试零。编译器不会为你做那件事。

关于c++ - 可以在运行时优化浮点零乘法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com