pow函数c ++错误

时间:2015-01-10 09:50:29

标签: c++ pow

我正在尝试为十进制到二进制转换器创建一个辅助函数,它将根据最高2的幂来告诉我要启动哪个位。

这是我的代码:

int determineStart(int val){
   int topval = 1;
   int i = 0;
   for(i = 0; val > 2 * topval; ++i){
      topval = pow(2, i);
   }
   return topval;
}

我收到以下错误: main.cpp:9: error: call of overloaded pow(int, int&) is ambiguous

我尝试过切换一些内容(例如将double或单独的变量作为pow()的第二个参数,使topval成为double,等)但似乎无法让它发挥作用。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

获得2的幂的最简单(也是最快)的方法是转移 - 无论如何CPU都使用二进制,所以它可以为你添加一些额外的零。

因此,您需要编写pow(2, i)而不是(1 << i)

答案 1 :(得分:1)

此类参数类型没有pow()函数。它可以是(float, int)(double, int)(long double, int)。如果用(int, int)调用它,编译器就不知道上面哪种类型使用了。最简单的解决方案是:

pow(2.0, i)

编辑: 我假设您使用pow()<cmath>

中的标准<math.h>定义

答案 2 :(得分:1)

转换可能是您的错误:您可以轻松地将int转换为double或float。 试试这个:

pow(2.0, i)

它的行为类似于:

pow((double)(2), i)