链接:http://www.zhihu.com/question/20396457/answer/23658441
来源:知乎
/* ================ SquareRootFloat ================ */
#include <iostream>
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 ) );
//迭代 1/sqrt(number)
//y = y * ( f - ( x * y * y ) );
//迭代 1/sqrt(number),如需要更高的精度请迭代多次
return number * y;
}