Shifting nth-root algorithm

Shifting nth-root algorithm

The shifting nth-root algorithm is an algorithm for extracting the "n"th root of a positive real number which proceeds iteratively by shifting in "n" digits of the radicand, starting with the most significant, and produces one digit of the root on each iteration, in a manner similar to long division.

Algorithm

Notation

Let "B" be the base of the number system you are using, and "n" be the degree of the root to be extracted. Let "x" be the radicand processed thus far, "y" be the root extracted thus far, and "r" be the remainder. Let α be the next "n" digits of the radicand, and β be the next digit of the root. Let "x"' be the new value of "x" for the next iteration, "y"' be the new value of "y" for the next iteration, and "r"' be the new value of "r" for the next iteration. These are all integers.

Invariants

At each iteration, the invariant y^n + r = x will hold. The invariant (y+1)^n>x will hold. Thus "y" is the largest integer less than the "n"th root of x, and "r" is the remainder.

Initialization

The initial values of "x", "y", and "r" should be 0. The value of α for the first iteration should be the most significant aligned block of "n" digits of the radicand. An aligned block of "n" digits means a block of digits aligned so that the decimal point falls between blocks. For example, in 123.4 the most significant aligned block of 2 digits is 01, the next most significant is 23, and the third most significant is 40.

Main loop

On each iteration we shift in "n" digits of the radicand, so we have x' = B^n x + alpha and we produce 1 digit of the root, so we have y' = B y + eta . We want to choose β and "r"' so that the invariants described above hold. It turns out that there is always exactly one such choice, as will be proved below.

The first invariant says that:

:x' = y'^n + r'

or

:B^n x + alpha = (B y + eta)^n + r'

So, pick the largest integer β such that

:(B y + eta)^n le B^n x + alpha

and let

:r' = B^n x + alpha - (B y + eta)^n

Such a β always exists, since if eta = 0 then the condition is B^n y^n le B^n x + alpha, but y^n le x, so this is always true. Also, β must be less than "B", since if eta = B then we would have

:(B(y+1))^n le B^n x + alpha

but the second invariant implies that

:B^n x < B^n (y+1)^n

and since B^n x and B^n (y+1)^n are both multiples of B^n the difference between them must be at least B^n, and then we have

:B^n x + B^n le B^n (y+1)^n:B^n x + B^n le B^n x + alpha:B^n le alpha

but 0 le alpha < B^n by definition of α, so this can't be true, and (B y + eta)^n is a monotonically increasing function of &beta;, so it can't be true for larger &beta; either, so we conclude that there exists an integer &gamma; with gamma such that an integer "r"' with r' ge 0 exists such that the first invariant holds if and only if 0 le eta le gamma.

Now consider the second invariant. It says:

:(y'+1)^n>x'

or

:(B y + eta + 1)^n>B^n x + alpha

Now, if &beta; is not the largest admissible &beta; for the first invariant as described above, then eta + 1 is also admissible, and we have

:(B y + eta + 1)^n le B^n x + alpha

This violates the second invariant, so to satisfy both invariants we must pick the largest &beta; allowed by the first invariant. Thus we have proven the existence and uniqueness of &beta; and "r"'.

To summarize, on each iteration:
# Let α be the next aligned block of digits from the radicand
# Let x' = B^n x + alpha
# Let &beta; be the largest &beta; such that (B y + eta)^n le B^n x + alpha
# Let y' = B y + eta
# Let r' = x' - y'^n

Now, note that x = y^n + r, so the condition

:(B y + eta)^n le B^n x + alpha

is equivalent to

:(B y + eta)^n - B^n y^n le B^n r + alpha

and

:r' = x' - y'^n = B^n x + alpha - (B y + eta)^n

is equivalent to

:r' = B^n r + alpha - ((B y + eta)^n - B^n y ^n)

Thus, we don't actually need x, and since r = x - y^n and x<(y+1)^n, r<(y+1)^n-y^n or r, or rn-1}over n} + O(x^n-2}over n}), so by using r instead of x we save time and space by a factor of 1/"n". Also, the B^n y^n we subtract in the new test cancels the one in (B y + eta)^n, so now the highest power of "y" we have to evaluate is y^{n-1} rather than y^n.

The final algorithm is:
# Initialize "r" and "y" to 0
# Repeat until desired precision is obtained:
## Let α be the next aligned block of digits from the radicand
## Let &beta; be the largest &beta; such that (B y + eta)^n - B^n y^n le B^n r + alpha
## Let y' = B y + eta
## Let r' = B^n r + alpha - ((B y + eta)^n - B^n y^n)
## Assign y leftarrow y' and r leftarrow r'
# y is the largest integer such that y^n, and y^n+r=x B^k, where k is the number of digits of the radicand after the decimal point that have been consumed (a negative number if the algorithm hasn't reached the decimal point yet).

Paper and pencil nth roots

As noted above, this algorithm is similar to long division, and it lends itself to the same notation:

1. 4 4 2 2 4 ---------------------- 3/ 3.000 000 000 000 000 // 1 = 300*(0^2)*1+30*0*(1^2)+1^3 - 2 000 1 744 = 300*(1^2)*4+30*1*(4^2)+4^3 ----- 256 000 241 984 = 300*(14^2)*4+30*14*(4^2)+4^3 ------- 14 016 000 12 458 888 = 300*(144^2)*2+30*144*(2^2)+2^3 ---------- 1 557 112 000 1 247 791 448 = 300*(1442^2)*2+30*1442*(2^2)+2^3 ------------- 309 320 552 000 249 599 823 424 = 300*(14422^2)*4+30*14422*(4^2)+4^3 --------------- 59 720 728 576

Note that after the first iteration or two the leading term dominates the(B y + eta)^n - B^n y^n, so we can get an often correct first guess at &beta; by dividing B r + alpha by n B^{n-1} y^{n-1}.

Performance

On each iteration, the most time-consuming task is to select &beta;. We know that there are "B" possible values, so we can find &beta; using O(log(B)) comparisons. Each comparison will require evaluating (B y +eta)^n - B^n y^n. In the "k"th iteration, y has "k" digits, and the polynomial can be evaluated with 2 n - 4 multiplications of up to k(n-1) digits and n - 2 additions of up to k(n-1) digits, once we know the powers of "y" and &beta; up through n-1 for "y" and "n" for &beta;. &beta; has a restricted range, so we can get the powers of &beta; in constant time. We can get the powers of "y" with n-2 multiplications of up to k(n-1) digits. Assuming "n"-digit multiplication takes time O(n^2) and addition takes time O(n), we take timeO(k^2 n^2) for each comparison, or time O(k^2 n^2 log(B)) to pick &beta;. The remainder of the algorithm is addition and subtraction that takes time O(k), so each iteration takes O(k^2 n^2 log(B)). For all "k" digits, we need time O(k^3 n^2 log(B)).

The only internal storage needed is "r", which is O(k) digits on the "k"th iteration. That this algorithm doesn't have bounded memory usage puts an upper bound on the number of digits which can be computed mentally, unlike the more elementary algorithms of arithmetic. Unfortunately, any bounded memory state machine with periodic inputs can only produce periodic outputs, so there are no such algorithms which can compute irrational numbers from rational ones, and thus no bounded memory root extraction algorithms.

Note that increasing the base increases the time needed to pick &beta; by a factor of O(log(B)), but decreases the number of digits needed to achieve a given precision by the same factor, and since the algorithm is cubic time in the number of digits, increasing the base gives an overall speedup of O(log^2(B)). When the base is larger than the radicand, the algorithm degenerates to binary search, so it follows that this algorithm is not useful for computing roots with a computer, as it is always outperformed by much simpler binary search, and has the same memory complexity.

Examples

Square root of 2 in binary

1. 0 1 1 0 1 ------------------ / 10.00 00 00 00 00 1 // 1 + 1 ----- ---- 1 00 100 0 + 0 -------- ----- 1 00 00 1001 10 01 + 1 ----------- ------ 1 11 00 10101 1 01 01 + 1 ---------- ------- 1 11 00 101100 0 + 0 ---------- -------- 1 11 00 00 1011001 1 01 10 01 1 ---------- 1 01 11 remainder

quare root of 3

1. 7 3 2 0 5 ---------------------- / 3.00 00 00 00 00 // 1 = 20*0*1+1^2 - 2 00 1 89 = 20*1*7+7^2 ---- 11 00 10 29 = 20*17*3+3^2 ----- 71 00 69 24 = 20*173*2+2^2 ----- 1 76 00 0 = 20*1732*0+0^2 ------- 1 76 00 00 1 73 20 25 = 20*17320*5+5^2 ---------- 2 79 75

Cube root of 5

1. 7 0 9 9 7 ---------------------- 3/ 5.000 000 000 000 000 // 1 = 300*(0^2)*1+30*0*(1^2)+1^3 - 4 000 3 913 = 300*(1^2)*7+30*1*(7^2)+7^3 ----- 87 000 0 = 300*(17^2)*0+30*17*(0^2)+0^3 ------- 87 000 000 78 443 829 = 300*(170^2)*9+30*170*(9^2)+9^3 ---------- 8 556 171 000 7 889 992 299 = 300*(1709^2)*9+30*1709*(9^2)+9^3 ------------- 666 178 701 000 614 014 317 973 = 300*(17099^2)*7+30*17099*(7^2)+7^3 --------------- 52 164 383 027

Fourth root of 7

1. 6 2 6 5 7 --------------------------- _ 4/ 7.0000 0000 0000 0000 0000 / 1 = 4000*(0^3)*1+400*(0^2)*(1^2)+40*0*(1^3)+1^4 - 6 0000 5 5536 = 4000*(1^3)*6+600*(1^2)*(6^2)+40*1*(6^3)+6^4 ------ 4464 0000 3338 7536 = 4000*(16^3)*2+600*(16^2)*(2^2)+40*16*(2^3)+2^4 --------- 1125 2464 0000 1026 0494 3376 = 4000*(162^3)*6+600*(162^2)*(6^2)+40*162*(6^3)+6^4 -------------- 99 1969 6624 0000 86 0185 1379 0625 = 4000*(1626^3)*5+600*(1626^2)*(5^2)+ ----------------- 40*1626*(5^3)+5^4 13 1784 5244 9375 0000 12 0489 2414 6927 3201 = 4000*(16265^3)*7+600*(16265^2)*(7^2)+ ---------------------- 40*16265*(7^3)+7^4 1 1295 2830 2447 6799


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Look at other dictionaries:

  • nth root — In mathematics, the nth root of a number x is a number r which, when raised to the power of n, equals x rn = x, where n is the degree of the root. A root of degree 2 is usually called a square root and a root of degree 3, a cube root. For example …   Wikipedia

  • Nth root — In mathematics, an n th root of a number a is a number b such that bn = a . When referring to the n th root of a real number a it is assumed that what is desired is the principal n th root of the number, which is denoted sqrt [n] {a} using the… …   Wikipedia

  • Cube root — Plot of y = for . Complete plot is symmetric with respect to origin, as it is an odd function. At x = 0 this graph has a vertical tangent. In mathematics, a cube root of a number, denoted …   Wikipedia

  • Methods of computing square roots — There are several methods for calculating the principal square root of a nonnegative real number. For the square roots of a negative or complex number, see below. Contents 1 Rough estimation 2 Babylonian method 2.1 Example …   Wikipedia

  • List of numerical analysis topics — This is a list of numerical analysis topics, by Wikipedia page. Contents 1 General 2 Error 3 Elementary and special functions 4 Numerical linear algebra …   Wikipedia

  • List of algorithms — The following is a list of the algorithms described in Wikipedia. See also the list of data structures, list of algorithm general topics and list of terms relating to algorithms and data structures.If you intend to describe a new algorithm,… …   Wikipedia

  • List of mathematics articles (S) — NOTOC S S duality S matrix S plane S transform S unit S.O.S. Mathematics SA subgroup Saccheri quadrilateral Sacks spiral Sacred geometry Saddle node bifurcation Saddle point Saddle surface Sadleirian Professor of Pure Mathematics Safe prime Safe… …   Wikipedia

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Catalan number — For names of numbers in Catalan, see List of numbers in various languages#Occitano Romance. In combinatorial mathematics, the Catalan numbers form a sequence of natural numbers that occur in various counting problems, often involving recursively… …   Wikipedia

  • Bernoulli number — In mathematics, the Bernoulli numbers Bn are a sequence of rational numbers with deep connections to number theory. They are closely related to the values of the Riemann zeta function at negative integers. There are several conventions for… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”