主题
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 迭代法

使用 Wolfram|Alpha 探索

参考文献

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.

在 Wolfram|Alpha 上被引用

平方根算法

请按如下方式引用

Weisstein, Eric W. "平方根算法。" 来自 MathWorld--Wolfram Web 资源。 https://mathworld.net.cn/SquareRootAlgorithms.html

主题分类