使用 pow() 会给出错误

Using pow() gives errors

本文关键字:出错 错误 pow 使用      更新时间:2023-10-16

请看下面的代码

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
    //int side1 = 0;
    //int side2 = 0;
    //int rightSide = 0;
    cout << "Right Side" << setw(10) << "Side1" << setw(10) << "Side2" << endl;
    for(int i=1;i<=500;i++)
    {
        //side1++;
        //cout << side1 << endl;
        for(int a=1;a<=500;a++)
        {
            //side2++;
            //cout << "side 2 " << side2 << endl;
            for(int c=1;c<=500;c++)
            {
                //rightSide++;
                int rightSideSqr = pow(c,c);
                int side1Sqr = pow(i,i);
                int side2Sqr = pow(a,a);
                if(rightSideSqr == (side1Sqr+side2Sqr))
                {
                    cout << rightSideSqr << setw(15) << i << setw(10) << a << endl;
                 }

            }
        }
    }
}

这给出了一个错误"PythagorialTriples.cpp:28:错误:重载的'pow(int&, int&)'的调用是不明确的"。如果我只是使用像 i*i 这样的手动电源而不是该方法,就不会发生这种情况。有人可以解释一下为什么会发生这种情况吗?反正我是C++新手。谢谢

<cmath> 中定义的pow有多个重载。在您的代码中,这 3 个都同样有效,因此编译器在选择正确的代码时遇到问题:

        pow(float, int);
        pow(double, int);
        pow(long double, int);

最简单的解决方案是在第一个参数上使用static_cast,以消除任何歧义。 例如

int side1Sqr = pow( static_cast<double>(i) ,i );
int side2Sqr = pow( static_cast<double>(a) ,a );

哇!Pow(x,y) 是 x 提高到 y 次方(用数学术语 - xy)!!不是 x*y

所以你试图在一个 5003 嵌套循环中获取 i幂。可能不是你想要的。替换为 pow(i,2) 以获得您想要的行为。

请注意,@Mooing Duck 提出了一个关于 c++ 中的 x^y 的极好观点,即 XOR 运算符。但我想如果你已经在使用pow,你已经弄清楚了。

它无法确定要使用哪个重载函数。尝试

pow(double(i), i);

pow(double(i), 2);

因为这看起来像你想要的。

你确定你能应付这么大的战俘吗?

Pow(x,y) 是 xy。 看看

http://www.cplusplus.com/reference/clibrary/cmath/pow/

波(双基,双指数);

长双

波(长双基,长双指数);

浮点数 pow (浮点基数,浮点指数);

双 Pow ( 双基数, 整数指数 );

长双

基(长双基,整数指数);

没有 INT 版本。您的编译器不知道哪一个是正确的。您必须使用以下static_cast告诉他们:

int side1Sqr = pow(static_cast<double>i,i);

对于大精度计算,您可以使用:

http://gmplib.org/

还有一个来自提升的解决方案。

相关文章: