繁体   English   中英

如何在C ++中使用带变量的指数?

[英]How do you use an exponent in c++ with a variable?

所以我意识到#include是必要的,并且有一个pow(x,y)在其中x ^ y起作用...但是当我尝试使用pow(2,(num-1))时,它踢回了一个错误...

errorC2668:'pow':对重载函数的歧义调用

我为此的代码行如下

perfect = (pow(2,(num-1))) * (pow(2,num)-1);

有什么建议吗?

提前致谢

编辑:

num确实声明为int。

num确实有一个值,从1开始到UINT_MAX

在方程式中添加了星号

编译器不知道要调用哪个pow()函数。 此处列出的重载给出以下列表:

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

编译器不会猜测要使用哪个。 通过强制转换使其明确。

perfect = (pow(2.,(double)(num-1))) < (pow(2.,(double)num)-1);

那里可能会有一些额外的演员,但它们不会伤害任何东西。

这些是C ++中允许的pow()函数。 问题在于您的代码将int作为第一个参数,而C ++不知道是将其提升为double还是long double。

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

尝试放入(double)2而不是2

perfect = (pow((double)2,(num-1))) * (pow((double)2,num)-1)

添加缺少的乘法(或所需的乘法),并且在行的结尾应有分号:

perfect = (pow(2,(num-1))) * (pow(2,num)-1) ;

错误C2668:'pow':仅在VC ++ 2005中对重载函数的模棱两可的调用 ,alex.m写道,

“ pow”(任何重载)将浮点类型数字(单精度,双精度或长双精度)作为第一个参数,而不是整数。 这是错误的来源,因为编译器无法猜测您希望长整数转换的方式。

只需尝试编写一个强制转换表达式,如下所示:

代码块

c = pow((double)numberOfScansCompleted,2);

因此,如果尝试pow((double)2,(num-1)) ,它应该可以工作。


有趣的是,当我将其开头输入Google时,出现了“提示对重载函数的模棱两可的调用”,这是搜索结果的最佳建议。

请记住,您还可以使用移位运算符编写2的整数次幂:

int perfect = (1<<(num-1)) * ((1<<num) - 1);

或使用ldexp (也包含在<cmath> ):

double perfect = ldexp(1.0, num-1) * (ldexp(1.0, num) - 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM