<span style="font-size:14px;">
</span>
今天在图书馆借了一本《高效能程序员的修炼》,内容幽默风趣。(其实我是看到作者是stack overflow创始人,才借的)。看到几十页中有一个例子是关于求平方根的,代码很简单,但是```第一次没看懂····才知道原理是根据牛顿-拉夫逊方法即牛顿迭代法,具体细节大家可以百度一下。
<span style="font-size:14px;">private double SquareBootAppr(int n)
{
double r=n/2;
while(abs(r-n/r)>t) //t=0.0000001
{
r=0.5*(r+n/r);
}
return r;
}</span>
还有一种方法,就是通过移位。开平方根反过来是求平方,只要判断结果的平方是否小于n.小于n,则最高位置1,反之置0.(没有第一种方法精度高)
<span style="font-size:14px;">private double SquareBootAppr(int n)
{
int r=0;
for(int i=15;i>0;i++)
{
if((r+(1<<i))*(r+(1<<r))<n)
{
r+=1<<i;
}
}
return r;
}</span>