我必须在功率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