简体   繁体   中英

power function to find the power where exponent is in decimal and less than 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

5 0.76

what i really tried was i wrote 0.76 as 76/100 and it would be 5 76/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

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)

您可以将数字转换为复数形式,然后使用de Moivre公式根据法律要求计算数字的第n个根。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM