C# 为什么除法比乘法慢?

在编程语言中,特别是 C# 中,可以执行 4 种算术运算:加法、减法、乘法和除法。

从外部角度来看,它们在性能方面似乎都很相似,但事实证明其中一个比其他 3 个要慢得多。

您可能会问哪一个更慢?部门。

根据这篇惠普论文

浮点除法和平方根的计算时间比加法和乘法要长得多。后两者是直接计算的,而前者通常是用迭代算法计算的。最常见的方法是使用无除法牛顿-拉夫森迭代来获得分母的倒数(除法)或倒数平方根的近似值,然后乘以分子(除法)或输入参数(平方根) 。

为了验证上面的陈述,我决定使用下面的代码运行一个简单的测试:

        //Generate two random numbers
        var rand = new System.Random();
        float a = rand.Next();
        float b = rand.Next();

        Debug.Log("Number a: " + a + " Number b: " + b);

        System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

        watch.Start();
        //Addition
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a + b;
        }
        watch.Stop();
        //Output
        Debug.Log("Addition took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Subtraction
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a - b;
        }
        watch.Stop();
        //Output
        Debug.Log("Subtraction took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Multiplication
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a * b;
        }
        watch.Stop();
        //Output
        Debug.Log("Multiplication took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

        watch.Reset();
        watch.Start();
        //Division
        for (int i = 1; i < 1000000; i++)
        {
            float tmp = a / b;
        }
        watch.Stop();
        //Division
        Debug.Log("Division took: " + watch.Elapsed.TotalSeconds.ToString("0.0000") + " seconds");

基本上,我对两个随机数进行了一百万次加法、减法、乘法和除法,并测量了每个数字的处理时间,测试重复了 5 次,结果如下:

  • 平均添加时间为 0.0004 秒
  • 减法平均耗时 0.0003 秒
  • 乘法平均耗时 0.0003 秒
  • 除法平均耗时 0.0044 秒

结果表明,加法、减法和乘法在性能方面相似,但除法似乎慢了 1100% 左右。

这是一个不小的差异,这导致了这样的结论:尽可能使用乘法而不是除法总是更好。例如,当您需要将数字除以 2 时,最好将其乘以 0.5。

推荐文章
为什么 C# 中的平方根运算速度很慢?
更快学习 C# 的 7 个有效技巧
探索 C# 中的关键函数
在 C# 中从多线程代码编写和检索数据的指南
掌握 C# 编程基础知识
使用 AI 自动生成 C# 代码
C# 中的多种编码方法