我知道的解决这个问题的唯一算法是牛顿迭代法(猜测一个解,然后不断改进直到足够好为止)。
还有其他想法吗(可以使用任何您喜欢的编程语言)?
PS:当然,我没有这个问题的任何用例,我只是出于学术目的进行研究。
我知道的解决这个问题的唯一算法是牛顿迭代法(猜测一个解,然后不断改进直到足够好为止)。
还有其他想法吗(可以使用任何您喜欢的编程语言)?
PS:当然,我没有这个问题的任何用例,我只是出于学术目的进行研究。
有一种高效的变体是约翰·卡马克方法,这是对牛顿迭代法的一种改进。
John Carmack method 是一种高效的变体,是对 Newton 方法的改进。
你可能想要查看计算平方根的方法中的算法。
这是牛顿迭代法的快速C
对数基数2
实现:
double sqrt(const double x)
{
union
{
int i;
double x;
} u;
u.x = x;
u.i = (1<<29) + (u.i >> 1) - (1<<22);
return u.x;
}