C++ 一个循环比几个循环好吗?
我一直在研究BigInteger的实现,当我考虑加法的解决方案时,我决定使用cleaner one,它考虑在函数中添加相应的数字,并在以后“规范化”它们。就像下面的例子一样 999 999+111 111C++ 一个循环比几个循环好吗?,c++,performance,C++,Performance,我一直在研究BigInteger的实现,当我考虑加法的解决方案时,我决定使用cleaner one,它考虑在函数中添加相应的数字,并在以后“规范化”它们。就像下面的例子一样 999 999+111 111 =10(添加后的值) =111110(标准化后的值) 但从那时起,我就想知道它是如何影响项目的效率的。多个循环做的小事情是否都比一个嵌套的大循环快? 例如,使用 int a[7]={0,9,9,9,9,9,9}; int b[7]={0,1,1,1,1,1,1}; int c[7]; 这是,
=10(添加后的值)
=111110(标准化后的值) 但从那时起,我就想知道它是如何影响项目的效率的。多个循环做的小事情是否都比一个嵌套的大循环快?
例如,使用
int a[7]={0,9,9,9,9,9,9};
int b[7]={0,1,1,1,1,1,1};
int c[7];
这是,
for(int q=0; q<7; ++q){
c[q]=a[q]+b[q];
if(c[q]>9){
c[q-1]=c[q]/10;
c[q]%=10;
}
}
for(int q=0;q9){
c[q-1]=c[q]/10;
c[q]=10;
}
}
比这更好
for(int q=0; q<7; ++q){
c[q]=a[q]+b[q];
}
for(int q=0;q<7;++q){
if(c[q]>9){
c[q-1]=c[q]/10;
c[q]%=10;
}
}
<代码> >(int q=0;q)很难判断这两种方法中哪一种会更有效。它可能在C++编译器供应商和单个供应商之间,从编译器的版本到版本不同。 底线是:
正常化后,缓存一致性会更好,因为您只需访问每个元素一次。只需在每个单元格的总和中包含一个进位(初始化为0)。也就是说,有关性能的问题应该总是说“同时尝试/all和profile”看看编译器生成的汇编语言。接下来,profile.Abracadabra!…呜呜。我的黑魔盒不知道答案。旁白:你测量了吗?你的编译器生成了什么汇编?启用了优化?我们无法告诉你哪个“更快”Mike Mike:如果性能是一个重要的目标,那么考虑通过使用比10更大的基数来减少迭代次数。如果小数转换频繁的话,十的大功率将工作,尽管自然二进制会加快速度。