我知道这个问题的唯一算法是牛顿方法(猜测,然后改进它,直到它足够好)。
任何其他想法(使用您喜欢的任何语言)?
PS:当然我没有任何用例,我只是出于学术原因进行研究。答案 0 :(得分:10)
始终存在John Carmack method,这是牛顿方法的高效变体。
答案 1 :(得分:5)
可以找到几个here。
答案 2 :(得分:0)
您可能需要检查Methods of computing square roots中的算法。
这是Newton's方法的快速C
Log base 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;
}