sqrt算法实现主要有以下几种方法,以下算法均来自网络(非原创):
1,牛顿迭代法
2,倒数速算法
3,二分法
4,无穷级数
方法3,4效率很差,现给出方法1,2并测试代码
//牛顿迭代法
float Sqrtf1(float value)
{
float factor = value;
float last = value;
while (fabs(factor - last) > 0.000001f)
{
last = factor;
factor = 0.5f * (factor + value / factor);
}
return factor;
}
//倒数速算法
float Sqrtf2(float value)
{
float x = value * 0.5f;
float y = value;
long i = *(long *)&y;
i = 0x5f3759df - (i >> 1);
y = *(float *)&i;
y = y * (1.5f - (x * y * y));
return value * y;
}
//测试代码
int main(int argc, char *argv[])
{
clock_t stTime, edTime;
float value = 123456789.0f;
long long count = 100000000;
stTime = clock();
for (long long i=0; i<count; i++)
{
Sqrtf1(value);
}
edTime = clock();
std::cout << (edTime - stTime) << std::endl;