除法比乘法慢多少倍

九月 5th, 2010 发表评论 阅读评论

前段时间写了个元素比较多的小动画,想体现出壮观的现象,但播放的时候一卡一卡的,看得观众都受不了,何况我们开发者。后来我进行了修改,主要是分开为按不同主状态运算,减少了大量函数调用,还有改造了一些浮点数除法为浮点数乘法。

但最后都不知道哪些才是动画很卡的原因了,呵呵,当我们讨论乘法与除法运算时间的效率时,只知道个大概的除法会比乘法慢,但空间是慢了多少,也没有个数。现在有空,正好测试一下乘法与除法的运算时间差别。

估计很多人都听说了除法非常的慢,会比乘法慢好几倍,上课时老师也说过吧。

#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略胜一筹,都快了一倍多了。
哈哈,根据上面的结果,有兴趣的同学在自己的机器上运行一下,就知道我的电脑是多么慢了--!

 

分类: 技术笔记 标签: 除法  乘法  效率  (1866次阅读)

  1. 2010-09-07 at 23:48
    坐个沙发来学习!
  2. 2010-09-08 at 00:23
    真是外行看热闹,内行玩旁门左道啊!
  3. 2010-09-09 at 17:17
    “真是外行看热闹,内行玩旁门左道啊!”
    笑~然后喷~
  4. 2010-09-11 at 09:58
    请问博主的feed怎么处理的?默认的都是乱码
  5. 2010-09-11 at 16:28
    这个问题基本上,很难!
  6. 2010-09-11 at 16:29
    茫然中···
  7. 2010-09-20 at 16:51
    头都大了、。。。
  8. xxsp
    2010-09-21 at 11:25
    如果开编译优化的话,估计addNtimes, multiNtimes, divNtimes中的计算量全变为0了。
  9. 2010-09-22 at 19:41
    头大~~~~~~~
  10. bugthat
    2010-09-25 at 22:59
    double s,i; // i是计数变量吧,怎么会是double?
    s = 0;
    for( i=0; i ++; i &lt; n )  s += i; //这不会死循环吗?

    楼主的代码在我机器上完全无法重现。
    并且比较的都是浮点数运算,没试试整数运算吗?
  11. 2010-09-27 at 09:35
    千年出一文,等一会啊啊……
    我是个磊砖头的,很少考虑算法,唉,最底层了
  12. 2010-10-20 at 21:10
    楼主的代码在我机器上完全无法重现。
  13. 2011-01-20 at 11:51
    第一次来! 写的不错, 新年快乐。