今天在别人的源码里看到一个很不错的函数,初次还没进入该函数看,以为就是一个普通的开方根函数,但进入后发现该函数竟然是著名的Carmack平方根求解算法,拥有极高的运算效率,堪称经典。号称比标准的sqrt()
函数快4倍!赶紧记录下来以后用!
//函数名:invSqrt(void)
//描述:求平方根的倒数
//该函数是经典的Carmack求平方根算法,效率极高,使用魔数0x5f375a86
static float invSqrt(float number)
{
volatile long i;
volatile float x, y;
volatile const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * (( long * ) &y);
i = 0x5f375a86 - ( i >> 1 );
y = * (( float * ) &i);
y = y * ( f - ( x * y * y ) );
return y;//----得到平方根的倒数 //return 1/y -----得到平方根
}