1

I was trying to create a program that finds the power of a real number . The problem is that exponent is in decimal and less than 1 but not negative.

suppose we have to find the power of

50.76

what i really tried was i wrote 0.76 as 76/100 and it would be 576/100 and after that i wrote 100√5^76

here is the code if you want to see what i did

public class Struct23 {


public static void main(String[] args) {
    double x = 45;
    int c=0;
    StringBuffer y =new StringBuffer("0.23");

    //checking whether the number is valid or not
    for(int i =0;i<y.length();i++){
        String subs = y.substring(i,i+1);


        if(subs.equals(".")){
            c=c+1;
        }     
    }
     if(c>1){ 
         System.out.println("the input is wrong");
             }
     else{
       String nep= y.delete(0, 2).toString();
        double store = Double.parseDouble(nep);
        int length = nep.length();
        double rootnum = Math.pow(10, length);
        double skit = power(x,store,rootnum);
        System.out.println(skit);

}

}
 static double power(double x,double store,double rootnum){
    //to find the nth root of number
    double number =  Math.pow(x, 1/rootnum);

     double power = Math.pow(number, store);
return power;
}

}

the answer would come but the main problem is that i cannot use pow function to do that

i can't also use exp() and log() functions.

 i can only use 

   +
   -
   *
   /

help me suggest your ideas .

thanks in advance

2 Answers2

4
def newtons_sqrt(initial_guess, x, threshold=0.0001):
    guess = initial_guess
    new_guess = (guess+float(x)/guess)/2
    while abs(guess-new_guess) > threshold :
        guess=new_guess
        new_guess = (guess+float(x)/guess)/2
    return new_guess




def power(base, exp,threshold=0.00001):
    if(exp >= 1): # first go fast!
        temp = power(base, exp / 2);
        return temp * temp
    else: # now deal with the fractional part
        low = 0
        high = 1.0
        sqr = newtons_sqrt(base/2,base)
        acc = sqr
        mid = high / 2

        while(abs(mid - exp) > threshold):
            sqr = newtons_sqrt(sqr/2.0,sqr)

            if (mid <= exp):
                low = mid
                acc *= sqr
            else:
                high = mid
                acc *= (1/sqr)
            mid = (low + high) / 2;
        return acc

print newtons_sqrt(1,8)
print 8**0.5

print power(5,0.76)
print 5**0.76

I reapropriated most of this answer from https://stackoverflow.com/a/7710097/541038

you could also expound on newtons_sqrt to give newtons_nth_root ... but then you have to figure out that 0.76 == 76/100 (which im sure isnt too hard really)

Community
  • 1
  • 1
Joran Beasley
  • 110,522
  • 12
  • 160
  • 179
2

you can convert your number to complex form of it and then use de Moivre' formula to compute the nth root of your number using your legal oprations.