C/C++ 求浮点数平方根

求浮点数x的平方根y,精度误差e。

1、显然y <= x,即在 [0, x] 中查找一个y,使得满足 | y * y - x | <= e,很容易想到二分查找,时间复杂度是O(logx)。

float Sqrt(float x)
{
    const float e = 0.0001;
    float low = 0, high = x, y = (low + high) / 2;
    while (y * y - x > e || y * y - x < -e)
    {
        if (y * y - x > e)
        {
            high = y; // 大了
        }
        else if(y * y - x < -e)
        {
            low = y; // 小了
        }
        y = (low + high) / 2;
    }
    return y;
}