为什么此代码不对负数求立方根?

问题描述 投票:0回答:2

我当时在用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) );
    }
}
c root cube
2个回答
0
投票

pow不接受非整数指数的负基数。 (可能是因为在特殊情况下进行传统上定义的工作非常繁重,尤其是在预期使用对数实现的情况下。)


0
投票

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) );
}

随时要求进一步的澄清和/或解释。

© www.soinside.com 2019 - 2024. All rights reserved.