我一直在致力于BigInteger的实现,当我考虑添加解决方案时,我决定采用更清晰的解决方案,它考虑在函数中添加相应的数字,并在稍后“正常化”它们。像在下面的例子中比其中几个更好吗?
999 999 + 111 111
= 10 10 10 10 10 10(值加法之后)
= 1 111 110(归一化后的值)
但此后我想知道它是如何影响程序的效率的。几个循环做的小事通常都会比一个大的嵌套循环更快地工作?
例如,使用
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; 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;
}
}
更好,怎么样大循环,有更多的事情要在每次迭代经历?
UPD。
正如有人建议我测量两个例子的性能时间。对于两个循环,平均时间(对于100mil。元素)〜4.85sec。对于一个循环〜3.72秒
当你走的时候进行标准化,对于缓存一致性会更好,因为你只需要访问每个元素一次。只需在每个单元的总和中包含一个进位(初始化为0)。也就是说,关于性能的问题应该总是说“试试/ all和profile”_ –
看看编译器生成的汇编语言。接下来,**个人资料**。 –
[Race Your Horses](https://ericlippert.com/2012/12/17/performance-rant/) – Filburt