2009-11-08 89 views
0
import java.lang.Math; 
public class NewtonIteration { 

    public static void main(String[] args) { 
     System.out.print(rootNofX(2,9)); 
    } 

    // computes x^n 
    public static double power(double x, int n) { 
     if (n==0) { 
      return 1; 
     }  
     double Ergebnis = 1; 
     for (int i=0; i<=Math.abs(n)-1; i++) { 
      Ergebnis *= x; 
     } 
     if (n<0) { 
      Ergebnis = 1/Ergebnis; 
     } 

     return Ergebnis; 
    } 

    // computes x^(1/n) 
    public static double rootNofX(int n, double x) { 
     return power(x, 1/n); 
    } 
} 

每当调用power(x,1/n)时,n将被重置为0.但是不是n给出的值为2的rootNofX的参数吗?为什么我的变量设置为0?

+0

您循环工作?你的例子是试图找到9的平方根。你是如何看待这个代码将循环1/2的时间和半乘1 * 9得到3的?你需要一个不同的算法来执行0和1之间的权力。 – jmucchiello 2009-11-08 01:54:05

+0

FYI:x ^(1/2)!= 1 /(x^2) 请重新学习关于指数和对数的法则。 - Jakob Krainz,Lehrstuhl 2 Informatik,Univ。 Erlangen – jakob 2013-11-11 11:11:30

回答

5

尝试:

// computes x^(1/n) 
    public static double rootNofX(int n, double x) { 
     return power(x, 1.0/n); 
    }

因为1intnint所以1/n是一个整数除法,其返回0时n不为1,当n为0抛出错误。

1.0是一个双重因此它使1.0/n你想要的双重划分。

+2

你还必须将方法'power'的参数'n'改为'double',否则它将不起作用。 – hjhill 2009-11-08 02:07:22

+0

@hjhill:你不需要。尝试一下。欢呼! :-D – NawaMan 2009-11-08 02:19:52

0

这是因为你正在使用整数,因此1/2 = 0.5(整数为0)。将原型更改为rootNofx(double n, double x)power(double x, double n)

此外,由于rootNofx使用power,在我看来,最好是以相同的方式排列参数,以避免混淆。

+2

2/1是0.5?这一定是我遇到很多麻烦的新数学! :) – 2009-11-08 01:33:29

+0

大声笑!对不起,我的意思是1/2 :) – 2009-11-08 01:34:17

1

1/n通常会成为一个分数,但是在声明你声明n是整数的情况下。每次都会打小数位!

1

这是因为功率是以“n”定义为一个整数,因此1/n总是小于1,当以int存储时,它将为零。将“int n”更新为“double n”。实施例下面:

​​
0

问题是你从rootNofX传入1/2到一个int,所以它变成零。

0

有后你解决的1/n的四舍五入为0,你怎么指望1/n1.0/n

之间有很大的区别考虑一下宣称n是一个int的真正含义......

相关问题