我对以下代码有一些疑问
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
为什么两段相似的代码之间的性能差异如此之大?
您的
calc
方法使用 i+=4
一次迭代 4 步,而 calc_2
方法使用 i++
一次迭代 1 步
因此,这意味着您的
calc
方法达到 n=2000000000
的速度比您的 calc_2
快大约 4 倍,这从您的时间结果中可以看出。考虑到循环迭代次数彼此差异很大,每次迭代的操作并不是太相关。