提高double /float 强转为int类型的速度
2011-07-15 09:44
274 查看
/* double到整数的转换超强的算法,无误差 (利用了IEEE浮点编码格式) ,比使用C语言 int a = (int)(浮点数)快很多*/
static inline int DoubleToInt_IEEE(double value)
{
static const double magic = 6755399441055744.0; // (1<<51) | (1<<52)
double tmp = value + magic;
return *(int*)&tmp;
}
/* float到整数, 允许存在误差情况使用*/
static inline int Fast_FloatToInt_IEEE(float value)
{
static const float magic_f = (3<<21);
static const long magic_i = 0x4ac00000;
float ftmp = value + magic_f;
return (*((int*)&ftmp)-magic_i) >> 1;
}
static_cast<int>(f)
最快
static inline int DoubleToInt_IEEE(double value)
{
static const double magic = 6755399441055744.0; // (1<<51) | (1<<52)
double tmp = value + magic;
return *(int*)&tmp;
}
/* float到整数, 允许存在误差情况使用*/
static inline int Fast_FloatToInt_IEEE(float value)
{
static const float magic_f = (3<<21);
static const long magic_i = 0x4ac00000;
float ftmp = value + magic_f;
return (*((int*)&ftmp)-magic_i) >> 1;
}
static_cast<int>(f)
最快
相关文章推荐
- 字符串转为float,int,double类型
- swift3-常量与变量,int、float、double,类型推导
- null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
- 一个函数将int,float,double等类型转string
- C语言基本数据类型int float double
- c语言基本数据类型short、int、long、char、float、double大小及命名规则
- c语言基本数据类型short、int、long、char、float、double
- [Java][细节](int)n的执行结果,其中n为float或double类型
- 编写重载函数min(),分别计算int、double、float、long类型数组中的最小树
- int类型定义,float、double类型引用造成的结果
- MFC----Cstring 与 int、float、double 数据类型的相互转换
- C++中将string类型转换为int, float, double类型
- java Byte和各数据类型(short,int,long,float,double)之间的转换
- java Byte和各数据类型(short,int,long,float,double)之间的转换
- 关于C++中string对象向int、float、double类型的转换的方法汇总
- Go语言把IP转为int存储.节省空间提高索引速度
- 什么样的数据算是byte类型,int类型,float类型,double类型,long类型
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- java int short long float double 类型描述以及原子性说明
- C++中将string类型转换为int, float, double