计算能力(X,Y)代码澄清C++

计算能力(X,Y)代码澄清C++,c++,C++,我正在寻求有关此代码的澄清。这里有一些关于代码的问题 当幂为负时,它在哪里乘以1/x*y? 在while循环内的if语句中,它测试电源%2是否=0,但如果它不是mod 2,那么在哪里进行计算? 如果有人能通过x=2和y=4这样的例子来说明,并展示程序如何运行,从而计算出16的幂,这将非常有用。 我是编程新手,所以我试图通过这些示例来理解基本的原语类型。先谢谢你 当幂为负时,它在哪里乘以1/x*y? 没有。当y为负时,代码使用幂=-幂;x=1/x 在while循环内的if语句中,它测试电源%2是否

我正在寻求有关此代码的澄清。这里有一些关于代码的问题

当幂为负时,它在哪里乘以1/x*y? 在while循环内的if语句中,它测试电源%2是否=0,但如果它不是mod 2,那么在哪里进行计算? 如果有人能通过x=2和y=4这样的例子来说明,并展示程序如何运行,从而计算出16的幂,这将非常有用。 我是编程新手,所以我试图通过这些示例来理解基本的原语类型。先谢谢你

当幂为负时,它在哪里乘以1/x*y? 没有。当y为负时,代码使用幂=-幂;x=1/x

在while循环内的if语句中,它测试电源%2是否=0,但如果它不是mod 2,那么在哪里进行计算? 不,没有。代码不检查电源是否均匀。它会检查电源是否为奇数:

int Power(double x, double y) {
    long long power = y;
    double result = 1.0;
    if (y<0) {
        power = -power;
        x = 1 / x;
    }
    while (power) {
        if (power & 1) {
            result *= x;
        }
        x *= x;
        power >>= 1;
    }
    std::cout << result;
    return result;
}

现在剩下的是偶数,如果你认为x^ 2n==x^ n^ 2,那么你将理解为什么代码继续:

    if (power & 1) {
        result *= x;
    }
例如,幂为5,则奇数幂由结果*=x;处理;,我们还有4个,x^4和x^2^2是一样的,所以我们可以用幂除以2,x被x^2代替

如果有人能通过x=2和y=4这样的例子来说明,并展示程序如何运行,从而计算出16的幂,这将非常有用。 您应该借此机会学习如何使用调试器。如果您想单步执行代码以查看每一行的功能:调试器


附言:代码几乎没问题。根本不好的是类型的混乱。double y被分配给long-long幂,double结果作为int返回。所有这些都没有意义。该函数无法正确计算浮点幂。因为这只是一个练习,所以我建议在任何地方都使用int,现在主要关注整数。最后但并非最不重要的一点是,请注意,这是一个实际上不应该编写的代码,因为已经有人编写了:。

难道你不能自己编写3吗?拿一支笔和一些纸,一步一步地写下发生的事情。1-如果y<0,你计算指数,做尾数的倒数,然后做剩余的幂计算。顺便说一句,这根本不会处理分数指数。将其作为双精度传递是一个谎言。记住,x的负幂等于1/x的正幂。然后看第一个条件。你可以让程序为你做数学计算-让它打印出x并生成每个循环,你会更好地看到它在做什么。谢谢你,是的,我正在尝试安装visual studio,以便我可以使用调试器。我一直在使用repl-it来运行代码
    x *= x;
    power >>= 1;