gpt4 book ai didi

c# - 在 .NET 中乘法比比较快吗?

转载 作者:太空狗 更新时间:2023-10-30 00:35:14 24 4
gpt4 key购买 nike

早上好,下午好,还是晚上好,

直到今天,我还认为比较是基本的处理器指令之一,因此它是计算机中最快的操作之一......另一方面,我知道乘法有时更棘手并且涉及很多位操作。然而,看到下面代码的结果,我有点震惊:

Stopwatch Test = new Stopwatch();

int a = 0;
int i = 0, j = 0, l = 0;
double c = 0, d = 0;

for (i = 0; i < 32; i++)
{
Test.Start();

for (j = Int32.MaxValue, l = 1; j != 0; j = -j + ((j < 0) ? -1 : 1), l = -l)
{
a = l * j;
}

Test.Stop();

Console.WriteLine("Product: {0}", Test.Elapsed.TotalMilliseconds);
c += Test.Elapsed.TotalMilliseconds;

Test.Reset();
Test.Start();

for (j = Int32.MaxValue, l = 1; j != 0; j = -j + ((j < 0) ? -1 : 1), l = -l)
{
a = (j < 0) ? -j : j;
}

Test.Stop();

Console.WriteLine("Comparison: {0}", Test.Elapsed.TotalMilliseconds);
d += Test.Elapsed.TotalMilliseconds;

Test.Reset();
}

Console.WriteLine("Product: {0}", c / 32);
Console.WriteLine("Comparison: {0}", d / 32);
Console.ReadKey();
}

结果:

Product: 8558.6
Comparison: 9799.7

快速解释:j 是一个辅助替代变量,如 (...), 11, -10, 9, -8, 7, (...) 直到归零,l 是存储j 符号的变量,a 是测试变量,我希望它始终等于 j 的模数。测试的目的是检查使用乘法或条件运算符将 a 设置为此值是否更快。

有人可以对这些结果发表评论吗?

非常感谢。

最佳答案

你的第二个测试不仅仅是比较,而是 if 语句。

这可能是在 CPU 中的一条 JUMP/BRANCH 指令中翻译的,涉及 branch prediction (可能有管道 block )然后可能比简单的乘法慢(即使不是那么多)。

关于c# - 在 .NET 中乘法比比较快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309350/

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