使用负指数处理而不在C ++中使用POW

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

伙计们,我正在读一本书,对以下问题的次要目标感到困惑。

数的幂可以通过将数本身乘以指数值的次数来计算。例如,可以将2乘以4乘以得到16,从而得出2乘以4的幂。编写一个程序,该程序:1.输入一个双精度数作为基数,并输入一个整数作为指数;

double base, ans = 0;
int exponent;

cout << "This program will calculate the power of any number that you enter.." << endl;
cout << "Please enter your base number" << endl;
cin >> base;
cout << "Thank you" << endl;
cout << "Please enter the Exponent" << endl;
cin >> exponent;
  1. 使用一个循环,将基数本身乘以基数,该循环重复int的次数;

    while (exponent != 0)
    {
        ans = ans + (base * base);
        --exponent;
    }
    
  2. 输出计算出的指数值。

    cout << "The answer is " << ans << endl;
    

[如果int值为0,则在输出为1的特殊情况下使用if语句。

if (exponent == 0)
{
    cout << "The answer is " << 1 << " because the exponent value entered was 0" << endl;
}

对于更具挑战性的版本,请处理指数为负的情况。(这是我的问题所在。.如果不使用POW,我将无法正常工作)这是我尝试过的:

else if (exponent < 0)
{
    ans = pow(base, exponent);
    /*
    ans++;
    while (exponent != 0)
    {
        ans = 1/(ans + (base * base));
        ++exponent;
    }
    */
    cout << "The answer is " << ans << endl;
}

我在网上进行了一些搜索,发现:“代表负指数。您要做的就是将1除以正指数。例如:6 ^ -2 = 1 /(6 ^ 2)。“

并且:“好吧,因为在C ++中,^是按位xor运算符...您需要使用pow()才能执行此操作。”

欢迎任何帮助或评论在此先感谢

c++ math syntax
1个回答
1
投票

[在数学上(即^在这里是指数)只是一个约定和定义的问题]

a ^ (-b) = 1 / (a^b)

因此,如果您知道如何计算(a^b),则只需要取倒数即可得到所需的结果。类似于:

double my_pow(double a,double b) {
      if (b < 0) return 1.0 / pow(a,std::abs(b));
      else return pow(a,b);
}

据我所知,您想编写自己的pow实现,所以这仅是为了说明如何使用适用于正指数和负指数的pow

关于您的代码,我看不出这是怎么回事

while (exponent != 0)
{
    ans = ans + (base * base);
    --exponent;
}

可能是正确的。

使用一个循环,将基数本身乘以基数,该循环重复int的次数;

没有那真的不是那个循环在做什么。

我希望看到这样的东西

ans = 1;
for (int i=0; i< exponent;++i) {
    ans *= base;
}

PS:如果您实际上不想自己写,可以使用std::pow。可以与负指数一起使用。


0
投票

使用双数据类型而不是整数,因为它没有显示小数点后的值并最终给出0作为输出。

并且也可以使用1 / pow(基数,指数)代替1 /(6 ^ 2)。

希望您觉得这有用。😇

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