C 为什么我在自己的第n根代码中得到这个结果?
我试着用我自己的代码来计算一个数字的n次方。它适用于109量级的数字,但对于更大的数字,它会给我带来奇怪的东西C 为什么我在自己的第n根代码中得到这个结果?,c,function,pow,C,Function,Pow,我试着用我自己的代码来计算一个数字的n次方。它适用于109量级的数字,但对于更大的数字,它会给我带来奇怪的东西 double nroot(double a, double b) { int j; double i, wtemp, w, xf, x, bgint, lsint, eps = 0.000000001, delta; if (b == 0) return 0; if (a == 1) return b; whil
double nroot(double a, double b) {
int j;
double i, wtemp, w, xf, x, bgint, lsint, eps = 0.000000001, delta;
if (b == 0)
return 0;
if (a == 1)
return b;
while (xf < (int)b) {
i++;
xf = power(i, a);
}
if (xf == b)
return i;
if (xf == b && a < 0)
return 1 / i;
else {
bgint = i;
lsint = i - 1;
for (j = 0; j < 1000000; j++) {
x = ((b - power(lsint, ABS(a))) / (xf - power(lsint, ABS(a)))) * (bgint - lsint);
w = lsint + x;
delta = w - wtemp;
if (ABS(delta) < eps) {
return w;
} else {
lsint += x;
wtemp = w;
}
}
if (a > 0)
return w;
else
return 1 / w;
}
}
事情是这样的:如果一个donroot(21000000)/*10.000.000.000*/
我得到-1.000002
我不明白这个结果从何而来,因为如果我做nroot(21000000)/*1.000.000.000*/
我会得到31622.776599
,这是正确的结果
任何审查将不胜感激 您的
电源
功能似乎正常
您的问题来自以下方面:
while(xf<(int)b)
您的
电源
功能似乎正常
您的问题来自以下方面:
while(xf<(int)b)
您的代码具有未定义的行为,因为
xf
在中未初始化,而(xf<(int)b){
在某些情况下,它只是偶然起作用……此外,将b
转换为(int)如果b
大于INT\u MAX
,在32位系统上约为20亿,则是不必要的,并且会产生反作用。请注意,i
也未初始化。在该循环之前,您可能应该将i
和xf
都设置为1
:
i = xf = 1;
while (xf < b) {
i++;
xf = power(i, a);
}
i=xf=1;
while(xf
您的代码具有未定义的行为,因为xf
在中未初始化,而(xf<(int)b){
在某些情况下,它只是偶然起作用……此外,将b
转换为(int)如果b
大于INT\u MAX
,在32位系统上约为20亿,则是不必要的,并且会产生反作用。请注意,i
也未初始化。在该循环之前,您可能应该将i
和xf
都设置为1
:
i = xf = 1;
while (xf < b) {
i++;
xf = power(i, a);
}
i=xf=1;
while(xf
你的第一项工作是看看使用标准的pow
函数是否解决了这个问题。顺便说一句,(n)个根元素可以用Newton Raphson解决。你的算法看起来不稳定,对我来说可能有缺陷。如何定义ABS()
?阅读您使用的每个函数的参数;对于您的下一个问题,请提供一些参数。如果您不打算支持分数根,则相应的参数应该是int
s,而不是double
s。@Bathsheba实际上我知道我的函数幂在很大的数下不起作用,但现在我想我知道为什么了。另外,我知道还有其他更好的方法,我只是用这种方法来证明效率。顺便说一句,问题出在而中。你的第一项工作是看看使用标准pow
函数是否解决了这个问题。顺便说一下,(n)根问题可以用Newton Raphson来解决。你的算法看起来不稳定,在我看来可能有缺陷。如何定义ABS()
?阅读您使用的每个函数的参数;对于您的下一个问题,请提供一些参数。如果您不打算支持分数根,则相应的参数应该是int
s,而不是double
s。@Bathsheba实际上我知道我的函数幂在很大的数下不起作用,但现在我想我知道为什么了。另外,我我知道还有其他方法可以更好地工作,我只是用这种方法来证明效率。顺便说一下,问题出在而中。是的,我认为这是问题所在,而且我的变量I和xf没有初始化。是的,我认为这是问题所在,而且我的变量I和xf没有初始化不敢相信我没有注意到,现在代码工作得足够好,谢谢!我不敢相信我没有注意到,现在代码工作得足够好,谢谢!