求平方根的兩種簡單演算法 (轉)

amyz發表於2007-08-15
求平方根的兩種簡單演算法 (轉)[@more@]

求平方根的演算法


1.b=a/2;
while (abs(b*b-a)>e) // e為一個很小的數,指明瞭演算法的精度
 b=(b+a/b)/2;

2.
條件:N(N+2*Q*R) <=Y
n進位制時,Q=n;R為上一次的結果;N為要試的滿足條件的最大的值;Y為計算到這時的餘數
(注意:補位時要看進位制,如果為10進位制,則應補100,即10*10;二進位制時應補4,即2*2)

例1:10開方根(10進位制)
sqrt(10)=3.1622776601683793319988935444327

  3. 1  6  2 
)10
  9  <=N(N+2*Q*R)=3*(3+2*10*0)=9<10 上 3
  1 00
  61  <=N(N+2*Q*R)=1*(1+2*10*3)=61<100 上 1
  39 00
  37 56  <=N(N+2*Q*R)=6*(6+2*10*31)=3756<3900 上 6
  1 44 00
  1 26 44  <=N(N+2*Q*R)=2*(2+2*10*316)=12644<14400 上 2
  17 56
  ....
  ....

例2:10開方根(2進位制)
N(N+2*Q*R)
由於:
 N=0或1
 Q=2
 R=未知
所以:
 N(N+2*Q*R) <=> R<<2+1

(10)D=(1010)B
sqrt(10)=(3.1622776601683793319988935444327)D=(0011.0010 1001 1000)B
  1  1. 0  0  1  0 
)10 10
  1  <=R<<2+1=0<<2+1=0+1=1<10 上 1
  1 10
  1 01  <=R<<2+1=1<<2+1=100+1=101<110 上 1
  1 00
  0  <=R<<2+1=11<<2+1=1100+1=1101>100 上 0
  1 00 00
  0  <=R<<2+1=110<<2+1=11000+1=11001>10000 上 0
  1 00 00 00
  11 00 01  <=R<<2+1=1100<<2+1=110000+1=110001<1000000 上 1
  11 11
 ......
 ......


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章