The Math Forum

Ask Dr. Math - Questions and Answers from our Archives
Associated Topics || Dr. Math Home || Search Dr. Math

Algorithm for Simple Fractional Exponents

Date: 03/14/2002 at 08:00:04
From: Matthew Rae Loutner
Subject: Need Algorithm for Resolving Simple Fractional Exponents.

Dr. Math,

I hope you can help. I am writing a computer program with a 
programming language that cannot do higher math. How can I explain to 
my program how to resolve simple fractional exponents using only 
addition, subtraction, multiplication, division, square, and square 
root? (I can put repetitive loops in the program, so repetition is 
not a problem.)

The problem will be in the form of X = 1.49^1/2 up to say, 
X = 1.73^1/30.

I just need to solve these for X.

I know there is a common algorithm that is used for this, but I can't 
locate it anywhere. I haven't even seen the problem addressed.


Date: 03/14/2002 at 08:34:37
From: Doctor Jerry
Subject: Re: Need Algorithm for Resolving Simple Fractional Exponents.

Hi Matthew,

One way of calculating a^{1/n} is to set

     x = a^{1/n}

   x^n = a

and so x will be a root of the equation

  f(x) = x^n-a.

So, one way is to apply Newton's method. This uses the idea of 
derivative from calculus. You also need a half-way decent first 
approximation to the root.

Another way is to use logs and exponentials.

      x = a^{1/n}

  ln(x) = (1/n)*ln(a)

After calculating log(a), you can do ln(a)/n = N. Then you will need 
to exponentiate each side:

   e^{ln(x)} = e^N

So if you use this way, you will need to have an algorithm to 
calculate ln and exp.

For this you can use the CORDIC algorithm.  Here's something I wrote a 
while back. For more detail see 

   How Do Calculators Calculate?   

Calculators use what is called the CORDIC method.

TI and HP use several stored constants and calculate the values of 
several sequences of numbers, using only addition and multiplication.  
They continue the calculation until sufficient accuracy is obtained.

The algorithm looks like this:  I'll use x_k to mean x sub k and 
x_{k+1} to mean x sub k+1, and so on.


x_{k+1} = x_k - d_k*y_k*2^(-k)
y_{k+1} = y_k + d_k*x_k*2^(-k)
z_{k+1} = z_k - d_k*s_k

The numbers d_k are equal to the sign of z_k (if z_k >= 0, d_k = 1; if 
z_k<0, then d_k = -1). Also, s_k = arctan(2^(-k)). The numbers s_k are 
permanently stored in the calculator, maybe up to k = 50 or so.

Starting values for the calculation are calculated.  If z_0 = t is 
given, where t is a given angle (in radians), then y_0 = 0 and 
x_0 = cos(s_0)*cos(s_1)*...*cos(s_{47}).

As k increases, x_k approaches cos(t) and y_k approaches sin(t).

- Doctor Jerry, The Math Forum   
Associated Topics:
High School Calculators, Computers
High School Exponents

Search the Dr. Math Library:

Find items containing (put spaces between keywords):
Click only once for faster results:

[ Choose "whole words" when searching for a word like age.]

all keywords, in any order at least one, that exact phrase
parts of words whole words

Submit your own question to Dr. Math

[Privacy Policy] [Terms of Use]

Math Forum Home || Math Library || Quick Reference || Math Forum Search

Ask Dr. MathTM
© 1994- The Math Forum at NCTM. All rights reserved.