Algorithm to calculate root (or power) in computer

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
6 replies · 8K views
hkBattousai
Messages
64
Reaction score
0
I need an algorithm to calculate nth root or power of any given real number. "n" can be either integer or fractional, and is real.

I found http://en.wikipedia.org/wiki/N-th_root_algorithm" , but it requires to calculate power in it, therefore I can't use it.

Newton's method:
[itex]x_{k+1} = \frac{1}{n} \left[{(n-1)x_k +\frac{A}{x_k^{n-1}}}\right][/itex]


So, I need another algorithm.
Can you please suggest one?
 
Last edited by a moderator:
Physics news on Phys.org
If you are writing it in c++, you can include math or math.h depending on your compiler and use the pow() function. Some other languages have similar math libraries.

I suspect your looking for something lower level without functions other than base instructions. This may be of interest to you: http://www.syntax-example.com/Code/calculate-powerab-ie-ab-1670.aspx
 
Last edited by a moderator:
fedaykin said:
If you are writing it in c++, you can include math or math.h depending on your compiler and use the pow() function. Some other languages have similar math libraries.

I suspect your looking for something lower level without functions other than base instructions. This may be of interest to you: http://www.syntax-example.com/Code/calculate-powerab-ie-ab-1670.aspx

Yes, I will write in C++ without using any external libraries like pow() or sqrt() of math.h. Your example code is in Assembly language. Rather than a pseudo code, I'm looking for a mathematical method for this calculation.
 
Last edited by a moderator:
hkBattousai said:
Yes, I will write in C++ without using any external libraries like pow() or sqrt() of math.h. Your example code is in Assembly language. Rather than a pseudo code, I'm looking for a mathematical method for this calculation.

Can't you just implement pow(x,n) ?
 
Jarle said:
Can't you just implement pow(x,n) ?

Actually, I'm more concerned about the mathematical aspect of the problem more than computer programming. I want to implement my own power() method.
 
hkBattousai said:
I want to implement my own power() method.

That's what I meant. for example to define x^k = pow(x,k) (excuse my java syntax)

double a = x;
for(int i = 0; i < k; i++) {
a = x * a;
}
return a;
 
Recall:

[tex] x^\alpha = e^{\ln x^\alpha} = e^{\alpha \ln x}[/tex]

now you just need an exponential and a log. Special cases like square roots can have nice iterations that converge quick (learned in real analysis of all places!), but I'm guessing this is the route you must take for general roots/powers.

Note that even though [tex]x[/tex] and [tex]\alpha[/tex] are real, when [tex]x<0[/tex] the result is complex. Are you including this case?

Good luck,

jason

edit: just realized that your question is for for the less general case of either [tex]\alpha[/tex] or [tex]1/\alpha[/tex] an integer. Jarle has the answer for the integer case. Once you have that, the 1/integer case can be done via the algorithm in your wikipedia page. Sorry if my generalization caused any confusion!
 
Last edited: