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赋予rootNofX值为2的参数?
答案 0 :(得分:5)
尝试:
// computes x^(1/n)
public static double rootNofX(int n, double x) {
return power(x, 1.0/n);
}
因为1
是int
而n
是int
所以1/n
是一个整数除法,当n不是1时返回0并抛出错误当n为0时。
1.0
是双倍的,因此它会使1.0/n
成为您想要的双重分割。
答案 1 :(得分:1)
1 / n通常是一个分数,但在权力声明中,你声明n是整数。那每次都会敲掉小数位!
答案 2 :(得分:1)
这是因为功率定义为“n”作为int,因此1 / n将始终小于1,当存储为int时将为零。将“int n”更新为“double n”。示例如下:
public static double power(double x, double n) { ... }
答案 3 :(得分:0)
这是因为你使用的是整数,所以1/2 = 0.5,整数为0.将原型更改为rootNofx(double n, double x)
和power(double x, double n)
。
另外,由于rootNofx
使用power
,我认为最好以相同的方式排序参数,以避免混淆。
答案 4 :(得分:0)
问题是你从rootNofX传递1/2到一个int,所以它变为零。
答案 5 :(得分:0)
1/n
和1.0/n
考虑宣称n
是int
的真正含义......