首页 / C# / c# – 乘法比.NET中的比较更快吗?
c# – 乘法比.NET中的比较更快吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 乘法比.NET中的比较更快吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1335字,纯文字阅读大概需要2分钟。
内容图文
![c# – 乘法比.NET中的比较更快吗?](/upload/InfoBanner/zyjiaocheng/807/05c98a4f1b5448f5b143ad8feccaae21.jpg)
早上好,下午或晚上,
直到今天,我认为比较是基本的处理器指令之一,因此它是计算机中可以做的最快的操作之一…另一方面,我知道乘法有时比较棘手并涉及大量的位操作.但是,看到以下代码的结果我有点震惊:
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(带有可能的流水线块),然后可能比简单的乘法慢(即使不是那么多).
内容总结
以上是互联网集市为您收集整理的c# – 乘法比.NET中的比较更快吗?全部内容,希望文章能够帮你解决c# – 乘法比.NET中的比较更快吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。