
随手写的程序,有点乱,不过很简单,将就看一下吧
#include <iostream.h>
//利用CPU里的浮点单元
#define number2int(i,d) __asm fld d __asm fistp i
int main()
{
unsigned long a,b;
double n = 123.4567890;
__asm rdtsc;
__asm mov a,eax;
int i = (int)n; //将浮点转成int,利用编译器的模拟代码来转
__asm rdtsc;
__asm mov b,eax;
cout<<b-a<<endl;
__asm rdtsc;
__asm mov a,eax;
number2int(i,n); //将浮点转成int,利用CPU的浮点单元来转
__asm rdtsc;
__asm mov b,eax;
cout<<b-a<<endl;
return 0;
}
结果是:
用CPU浮点单元的速度是比用编译器里的模拟计算要快3倍。
可以自已试一下。
如果是进行大量的数据转换,可以想像一下时间可以省下多少
[ 此贴被zhoubaozhou在2007-08-13 23:45重新编辑 ]