我一直在致力於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