我当时在用C编写一个用于使数字成根的函数,但我偶然发现了一个问题:它与正数和平方根的立方根非常有效,但是当我尝试使负数的立方根有效时,它返回:-1。#IND00我尝试研究,结果返回的数字太大,但我不明白为什么...(“ rooter”是函数,x是radicand,ind是度。)
[我也尝试放入'0.66'而不是1 / ind,但结果相同。
float rooter(int x, int ind)
{
if(ind%2==0)
{
if (x>=0)
return ( pow(x, 1.0/ind) );
else
errore=1;
return -1;
}
else
{
return ( pow(x, (float)1.0/ind) );
}
}
pow不接受非整数指数的负基数。 (可能是因为在特殊情况下进行传统上定义的工作非常繁重,尤其是在预期使用对数实现的情况下。)
如AProgrammer]所述,在您的情况下pow
函数不接受负的x
。为了解决这个问题,您可以“记住” x
的符号,将其positive值(幅度)传递给pow
,然后重新应用该符号(因为您已经检查了ind
在这种情况下为奇数):
else { float sign = x < 0.0 ? -1.0 : +1.0; return sign * ( pow(fabs(x), (float)1.0/ind) ); }
随时要求进一步的澄清和/或解释。