为什么这些阶乘算法的性能差异如此之大

问题描述 投票:0回答:1

我对以下代码有一些疑问

using UnityEngine;

    private void Calc(int n) {
        float time = Time.realtimeSinceStartup;
        (int fact, int fact1, int fact2, int fact3) =(1,1,1,1);
        for (int i = 1; i < n; i+=4) {
            fact *= i;
            fact1 *= i+1;
            fact2 *= i+2;
            fact3 *= i+3;
        }
        time = Time.realtimeSinceStartup - time;
        Debug.Log("calc: "+time);
    }

    private void Calc_2(int n) {
        float time = Time.realtimeSinceStartup;
        int fact = 1;
        for (int i = 2; i < n; i++) {
            fact *= i;
        }
        time = Time.realtimeSinceStartup - time;
        Debug.Log("calc_2: "+time);
    }

当n=2000000000时,两段代码的计算时间相差很大

calc: 0.4483032
calc_2: 1.34198

为什么两段相似的代码之间的性能差异如此之大?

c# algorithm performance factorial
1个回答
0
投票

您的

calc
方法使用
i+=4
一次迭代 4 步,而
calc_2
方法使用
i++

一次迭代 1 步

因此,这意味着您的

calc
方法达到
n=2000000000
的速度比您的
calc_2
快大约 4 倍,这从您的时间结果中可以看出。考虑到循环迭代次数彼此差异很大,每次迭代的操作并不是太相关。

© www.soinside.com 2019 - 2024. All rights reserved.