为什么要测试模数速度?
我有一个应用程序,模数运算每秒执行数百万次。我必须处理非常大的数字,所以我选择了unsigned long long一种数据类型。大约一周前,我为我的应用程序编写了一个新算法,该算法需要对更少的数字执行模运算我以前使用的数字(例如26而不是10000000)的数字执行模运算。我选择unsigned int用作数据类型。速度显着提高,而算法几乎相同。
测试...
我用 C 语言编写了两个简单的程序来测试模数计算的速度。
#include <stdio.h>
typedef unsigned long long ull;
int main(){
puts("Testing modulus with ull...");
ull cnt;
ull k, accum=0;
for(k=1, cnt=98765432;k<=10000000;++k,--cnt)
accum+=cnt%80;
printf("%llu\n",accum);
return 0;
}
我唯一改变的是名为cnt.
我用这些程序进行time ./progname了测试,结果如下。
- 和
unsigned long long:3.28 秒 - 与
unsigned int: 0.33 秒
注意:我在越狱的 iPad 上测试它,这就是为什么它需要这么多时间。
为什么?
为什么版本与unsigned long long需要这么长时间才能运行?
更新1:添加--cnt到循环中cnt%80不会保持不变;还是一样的结果。
Update2:删除printf并添加accum以消除所花费的时间printf;现在的结果要少得多,但仍然有很大不同。