主題
Search

平方根演算法


一個對 sqrt(n) 的近似值序列 a/b 可以透過因式分解得到

 a^2-nb^2=+/-1
(1)

(其中 -1 只有當 -1n二次剩餘時才有可能)。然後

 (a+bsqrt(n))(a-bsqrt(n))=+/-1
(2)
 (a+bsqrt(n))^k(a-bsqrt(n))^k=(+/-1)^k=+/-1,
(3)

並且

(1+sqrt(n))^1=1+sqrt(n)
(4)
(1+sqrt(n))^2=(1+n)+2sqrt(n)
(5)
(1+sqrt(n))(a+bsqrt(n))=(a+bn)+sqrt(n)(a+b).
(6)

因此,ab 由以下遞推關係給出

a_i=a_(i-1)+b_(i-1)n
(7)
b_i=a_(i-1)+b_(i-1)
(8)

其中 a_1=b_1=1。使用此方法獲得的誤差是

 |a/b-sqrt(n)|=1/(b(a+bsqrt(n)))<1/(2b^2).
(9)

因此,對 sqrt(n) 的前幾個近似值由以下給出

 1,1/2(1+n),(1+3n)/(3+n),(1+6n+n^2)/(4(n+1)),(1+10n+5n^2)/(5+10n+n^2),....
(10)

這個演算法有時被稱為婆什迦羅-布龍克演算法,這些近似值正是透過取 sqrt(n)連分數的連續收斂項得到的。事實上,如果 a/b 是對 sqrt(2) 的近似值,那麼 (a+2b)/(a+b) 是一個更好的近似值(n=2 情況),這在公元二世紀就被士麥那的狄翁所知(Wells 1986, p. 35)。

另一種推導此序列的通用技術,稱為牛頓迭代法,是透過令 x=sqrt(n) 得到的。那麼 x=n/x,因此序列

 x_k=1/2(x_(k-1)+n/(x_(k-1)))
(11)

二次收斂到根。因此,對 sqrt(n) 的前幾個近似值由以下給出

 1,1/2(1+n),(1+6n+n^2)/(4(n+1)),(1+28n+70n^2+28n^3+n^4)/(8(1+n)(1+6n+n^2)),....
(12)

Wolfram 迭代法提供了一種使用二進位制表示法查詢整數平方根的方法。


另請參閱

牛頓迭代法, 畢達哥拉斯常數, 平方根, Wolfram 迭代法

使用 探索

參考文獻

Flannery, S. 和 Flannery, D. 編碼:數學之旅。 倫敦:Profile Books, p. 132, 2000.Wells, D. 企鵝好奇與有趣的數字詞典。 Middlesex, England: Penguin Books, pp. 34-35, 1986.Wolfram, S. 一種新科學。 Champaign, IL: Wolfram Media, p. 1168, 2002.

在 上被引用

平方根演算法

請按如下方式引用

Weisstein, Eric W. "平方根演算法。" 來自 Web 資源。 https://mathworld.tw/SquareRootAlgorithms.html

主題分類