有人在Quake III (设计者John Carmack )的source code里面发现这么一段用来求平方根的代码:
/*
================
SquareRootFloat
================
*/
float SquareRootFloat(float number) {
long i;
float x, y;
const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 ); //注意这一行
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}
这里还有论文论述了上述内容。
http://www.seraphy.cn/blog/attachments/month_0712/82007128123220.pdf
感叹,数学才是 计算机真正的基础啊!