Program to compute powers
Hi there folks.
I'm trying to create a program that takes 2 numbers from command line arguments and use the second value as a power so for e.g. java Power 10 2 should give 100. But i want to do this without using the Math.pow method, and using a for loop. I have the following so far but i'm not sure what the problem is and it;s only seem to be doinng square numbers (i.e. to the power of 2)
Code java:
public class Power
{
public static void main(String [] args)
{
int mantissa = Integer.parseInt(args[0]);
int exponent = Integer.parseInt(args[1]);
int answer;
for(int i=0; (mantissa*mantissa) < exponent; i++)
exponent=exponent + i;
answer = mantissa*mantissa;
System.out.println("Result is " + answer);
}
}
Re: Program to compute powers
Well, all you ever set the value of answer to is mantissa*mantissa so what did you expect?
Put your code aside. Take a paper and write down the steps to get a power in simple English (or your native language). Check your steps with 3 or 4 sample data sets. When it's all correct (and not before!), convert those steps into Java code.
db
Re: Program to compute powers
I know how to get powers, i wrote pseudocode and designed it, but im not sure what the case is for like cubics and powers more than 2.
Re: Program to compute powers
You know there already is a class called Math that has a method called power that takes two numbers and raises the first number to the power of the second number.
Re: Program to compute powers
Code java:
public power(int num, int power)
{
int num2;
if (power == 0 && num!=0)
{
num2 = 1;
}
else if (power == 1)
{
num2 = num;
}
else if (1 < power)
{
num2 = num * power(num, power -1);
}
else if(0 > power && num!=0)
{
num2 = 1/power(num, - power);
}
}
Well...that may not quite work, haven't tried it out yet, but it's on the right track.
Re: Program to compute powers
You're algorithm doesn't compute x^y.
Get out a piece of paper and "execute" the code as if you were the computer (pick some sample inputs):
ex. mantissa = 4, exponent = 3
4^3 = 64
Code Java:
for(int i=0; (mantissa*mantissa) < exponent; i++)
exponent=exponent + i;
1. initialize i = 0
2. 4 * 4 = 16
3. exponent = 3
4. 16 < 3?
5. false, exit the for loop
Code Java:
answer = mantissa*mantissa;
System.out.println("Result is " + answer);
6. answer = 4 * 4 = 16
7. Print out "result is 16"
Re-visit your pseudo-code and make sure that that is correct.
As far as I can tell, your code at best will give you mantissa^2, and at worst will keep you stuck indefinately inside the for-loop (well, not really indefinately, integers wrap around at 2^31 so eventually your code will stop and give you mantissa^2)
edit:
Quote:
Code Java:
public power(int num, int power)
{
if (power == 0 && num!=0)
{
num2 = 1;
}
else if (power == 1)
{
num2 = num;
}
else if (1 < power)
{
num2 = num * power(num, power -1);
}
else if(0 > power)
{
num2 = 1/power(num, - power);
}
}
This isn't quite correct (for various reasons).
1. This isn't proper Java syntax (no return type, num2 is never declared).
2. 0^0 = 1. In your code, as far as I can work out it's un-determined
3. Try running power(2,-1). You'll get a rather interesting result (correct result = 0.5). I actually can't think of a case off the top of my head where this code would give you correct results.
4. No non-integer inputs for power (or number, but this is easier to fix than non-integer powers), i.e. power(2.5, -1.346)
5. (minor issue) Assuming this code did actually work, this gives an O(n) solution at best (I didn't perform a thourough analysis, but it can only be worse). The best solution for computing x^y is O(1) (granted, there is a bit of "cheating" by using logarithm tables)
6. We're here to help people find the answers to their problems, not give the answer to them :P