我必須在功率X(X和1到300之間的任何值)範圍內提高基數50中的許多數字。 這些數字存儲爲bignums。高速緩存乘法操作
我的問題是:因爲我會乘以很多倍兩位數的數字(基數50)會緩存這種乘法更快嗎?
所以,每次我乘a[]
與b[]
時間我會做a[i]*b[j]
很多次,a[i]
和b[j]
是基地50個號碼。
我在想每次都不是在做a[i]*b[j]
的實際操作,預先創建矩陣不會更快:prod[50][50]
,其中prod[i][j] = i*j
。然後我會有類似prod[a[i]][b[j]]
的東西。
從內存中讀取的速度是否比實際進行的乘法更快?
如果我的問題不明確簡單的例子:
相反的:
for(int i=1; i<=100; ++i){
sum += 50*30;
sum += 37*20;
}
這是更快:
for(int i=1; i<=100; ++i){
sum += prod[50][30];
sum += prod[37][20];
}
?
爲什麼不首先將數字轉換爲二進制表示? – Lol4t0 2013-05-02 17:07:04
這將如何幫助?是否需要更多時間才能轉換爲二進制文件並返回到基數50?請注意,這些數字很大,例如50^1000。不能存儲在單個變量中。 – Cristy 2013-05-02 17:08:38
爲什麼要50?在實現bignum時(最多使用'sqrt(MAXINT)'),通常使用更大的基數,因爲這可以用更少的操作和更少的內存來完成更多的操作。即使你最終需要基數爲50的輸出,我也會下注,這可以節省足夠的時間,以便在50次轉換後仍然是淨贏。 – delnan 2013-05-02 17:10:58