为什么要测试模数速度?
我有一个应用程序,模数运算每秒执行数百万次。我必须处理非常大的数字,所以我选择了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
;现在的结果要少得多,但仍然有很大不同。