除法比乘法慢多少倍
前段时间写了个元素比较多的小动画,想体现出壮观的现象,但播放的时候一卡一卡的,看得观众都受不了,何况我们开发者。后来我进行了修改,主要是分开为按不同主状态运算,减少了大量函数调用,还有改造了一些浮点数除法为浮点数乘法。
但最后都不知道哪些才是动画很卡的原因了,呵呵,当我们讨论乘法与除法运算时间的效率时,只知道个大概的除法会比乘法慢,但空间是慢了多少,也没有个数。现在有空,正好测试一下乘法与除法的运算时间差别。
估计很多人都听说了除法非常的慢,会比乘法慢好几倍,上课时老师也说过吧。
#include "stdio.h"
#include "time.h"
#define MAX_COMPUTE_N 100000000
typedef int (*compu_function)(int);
int addNtimes( int n )
{
double s,i;
s = 0;
for( i=0; i ++; i < n ) s += i;
return 1;
}
int multiNtimes( int n )
{
double s,i;
s = 10000.0f;
for( i=0; i ++; i < n ) s *= 1.1f;
return 1;
}
int divNtimes( int n )
{
double s,i;
s = 10000.0f;
for( i=0; i ++; i < n ) s /= 1.1f;
return 1;
}
long getTime( compu_function f )
{
time_t t1,t2;
t1 = clock( ) ;
f( MAX_COMPUTE_N );
t2 = clock( ) ;
return (long)(t2 - t1);
}
int main(void)
{
printf("浮点数运算时间比较,执行次数 N = %d\n", MAX_COMPUTE_N );
printf("加法时间: %d ms\n", getTime(addNtimes) );
printf("乘法时间: %d ms\n", getTime(multiNtimes) );
printf("除法时间: %d ms\n", getTime(divNtimes) );
getchar();
return 0;
}
我在g++和vc6.0上都试一了一下,分别如下,
g++的运行结果:
浮点数运算时间比较,执行次数 N = 100000000
加法时间: 1110 ms
乘法时间: 1046 ms
除法时间: 15500 ms
vc6.0的运行结果:
浮点数运算时间比较,执行次数 N = 100000000
加法时间: 2406 ms
乘法时间: 2406 ms
除法时间: 15563 ms
看到,除法的运行时间约为乘法时间的10左右,在不同的编译器下会有些区别,估计在别的某些嵌入式平台上应该会不一样吧。
比较上面两个编译器运行的结果,发现除法时间差不多,但从加法、乘法来看,g++比vc6.0略胜一筹,都快了一倍多了。
哈哈,根据上面的结果,有兴趣的同学在自己的机器上运行一下,就知道我的电脑是多么慢了--!
笑~然后喷~
s = 0;
for( i=0; i ++; i < n ) s += i; //这不会死循环吗?
楼主的代码在我机器上完全无法重现。
并且比较的都是浮点数运算,没试试整数运算吗?
我是个磊砖头的,很少考虑算法,唉,最底层了