2015-01-10 2 views
0

내가 이진 변환기에 소수를위한 도우미 함수를 만들려고하고 어느 2.펑 기능 C++ 오류

이 가장 높은 전력을 기초로 시작되는 비트 말해 것 내가 가지고있는 코드는 다음과 같습니다

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

내가 주위에 몇 가지 전환 시도했습니다 (예, pow()의 두 번째 PARAM로 double 또는 별도의 변수에 퍼팅을 0으로, double 등)하지만 제대로 작동하지 않는 것 같습니다.

내가 뭘 잘못하고 있니?

+0

이 프로그램이 다른'pow' 정의가 있습니까? 전체 프로그램 – bluefog

답변

2

두 가지의 힘을 얻을 수있는 가장 쉬운 (빠른) 방식에서 표준 pow() 정의를 사용하는 가정 이 이동하고있다 - CPU를 어쨌든 바이너리를 사용하기 때문에 마지막에 몇 가지 여분의 0을 추가 할 수 있습니다.

따라서 pow(2, i) 대신 (1 << i)을 작성하십시오.

1

이러한 인수 유형에는 pow() 함수가 없습니다. (float, int), (double, int) 또는 (long double, int) 일 수 있습니다. (int, int)으로 호출하면 컴파일러는 위 유형 중 어느 것이 사용되는지 알 수 없습니다. 가장 간단한 해결책은 할 것 :

pow(2.0, i) 

편집 : 나는 당신이 <cmath> 또는 <math.h>

+0

을 게시하고 [설명] (http://ideone.com/ndcIrY) – bluefog

+0

Visual Studio 2010을 사용하고 오류가 발생합니다. 오버로드 된 함수를 모호하게 호출합니다. – Avert

+1

@ShikharBhardwaj 더 많은 오버로드가 C++ 11에 추가되었습니다. –

1

캐스팅은 아마도 오류 일 수 있습니다. int를 double 또는 float으로 쉽게 캐스팅 할 수 있습니다. 이 시도 :

pow(2.0, i) 

것처럼 동작합니다 :

pow((double)(2), i)