首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

FastFloatToInt操作原理?解决方案

2012-02-29 
FastFloatToInt操作原理?书上说,对于x87FPU,浮点到整数的转换操作(截断取整)非常耗时。因为x87对浮点数默认

FastFloatToInt操作原理?
书上说,对于x87FPU,浮点到整数的转换操作(截断取整)非常耗时。因为x87对浮点数默认取整为最接近的整数(舍入取整),所以对于每次转化,x87   FPCW都需要改变2次,开销很大。接着,书中提出了一种快速转换的近似方法(f为正浮点)

#define   FLOAT_FTOI_MAGIC_NUM   (float)(3   < <   21)
#define   IT_FTOI_MAGIC_NUM   0x4ac00000
#define     tag
int   FastFloatToInt(float   f)
{
f   +=   FLOAT_FTOI_MAGIC_NUM;
return   (*((int*)&f)   -   IT_FTOI_MAGIC_NUM)   > >   1;
}

虽然对float浮点格式有所了解,我还是看不太明白上面的代码。
请高手指点一二。

[解决办法]
貌似他这个只有对 f < (1 < <23) - (3 < <21) 的数据精度比较高, 大了以后就错了 ...
对小于 ((1 < <23)-(3 < <21)) 的正浮点数,加上 (3 < <21) 不会影响结果的阶码 ...

偶觉得还不如这样简单又精度高,同时没有任何浮点运算, 不过是截断的, 不是舍入的 ...
int FastFloatToInt2( float f )
{
int x , p , a ;
x = *(int*)&f ,p=(x> > 23)-127,a=((x&0x7fffff)|0x800000);
return p <0?0:p> =23?a < <(p-23):a> > (23-p);
}

热点排行