Quake3游戏引擎中平方根相关算法
参考链接【知乎】有哪些算法惊艳到了你?
http://www.zhihu.com/question/26934313
1. 平方根
float InvSqrt (float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
作者:覃超
链接:http://www.zhihu.com/question/26934313/answer/37594577
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其中magic number 0x5f3759df的来源,这里有文章专门探讨了取值的原因。
2. 平方根倒数
double sqrt( double x )
{
float y;
float delta;
float maxError;
if ( x <= 0 )
{
return 0;
}
// initial guess
y = x / 2;
// refine
maxError = x * 0.001;
do {
delta = ( y * y ) - x;
} while ( delta > maxError || delta < -maxError );
return y;
}
作者:覃超
链接:http://www.zhihu.com/question/26934313/answer/37594577
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。