2014-12-23 4 views
-1

내가 가진 여러 입력 변수표현 POW 곱() 내 계산

M_s = 1.989 × 〖10〗^30
G = 6.67384 × 〖10〗^(- 11)
A = 1.496 × 〖10〗^내가 쓸 때 8

long double G = 6.67384 * (pow(10,-11)); 

같은 내가 얻을 t "G는 6.67384 동일 -11의 힘에 10를 곱"

c:\users\user\documents\visual studio 2010\projects\1.det.earth location in orbit\1.det.earth location in orbit\1.det.earth location in orbit.cpp(15): error C2668: 'pow' : ambiguous call to overloaded function 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(583): could be 'long double pow(long double,int)' 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(535): or  'float pow(float,int)' 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(497): or  'double pow(double,int)' 
1>   while trying to match the argument list '(int, int)' 

이 어떻게 문을 표현할 수 있으며, 정확한 답변을 얻을 : 그는 메시지를 오류? 어떤 STL 라이브러리를 포함해야합니까?

+4

긴 더블 G = 6.67384 전자 (11). –

답변

4

그냥 컴파일러 중 하나 기대 pow의 두 인수 int를 전달하는 것으로,이 라인 문제는이

long double G = 6.67384 * pow(10.0, -11); 

long double G = 6.67384 * (pow(10,-11)); 

을 변경 세

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

그래서 어떤 함수를 호출할지 혼란 스럽습니다.

하지만 당신이 직접 당신이 정말로하지 않는이

long double G = 6.67384E-11; 

처럼 (10)의 힘을 표현할 수있는 C++의 이후

pow 기능이 필요합니다.

+0

이제 작동합니다! 고마워 :)) –

+0

예.그래서, G 변수가 pow에 한번 곱해진 것은 실제로 프로세서에 사용할 pow 구조를 알려줍니다. G에 대해 long double 형으로 선언 되었기 때문에 pow에 곱합니다 (따라서 pow는 (long double, long double) 인수를 취할 것으로 예상됩니다). 내가 맞습니까? –

+1

첫 번째 인수는 실제로'double'입니다. '10.0f'는 실수 리터럴입니다. – MSalters

3

Benjamin Bannier가 의견에서 더 좋은 아이디어를 가졌습니다. 그러나 그 공간에는 허용되지 않는 공간이있었습니다.

long double G = 6.67384e-11; 

이 더 정확합니다, 이진로의 전환이 컴파일러에 의해 수행되기 때문에 아마, 빠른 : 정리는 다음과 같습니다. 물론 과학자는 그 가치가 친숙합니다. 실제 정확도 문제는 제한된 G 측정으로 인해 발생한다는 것을 알고 있습니다. long double이 필요하지 않으며 float이면 충분하고 double이면 충분합니다.

'pow' : ambiguous call to overloaded function 
could be 'long double pow(long double,int)' 
or  'float pow(float,int)' 
or  'double pow(double,int)' 
      while trying to match the argument list '(int, int)' 

메시지는 컴파일러가 추측 할 수 없음을 말한다 : 가까운 미래에 당신이 읽고 오류 메시지를 이해할 필요가

1

(우리는 15 자리 조만간에 G를 알고하지 않을거야) 첫 번째 인수가 int이므로 원하는 함수의 오버로드는 세 가지 방식으로 캐스팅 될 수 있습니다. 당신이 long double 결과가 필요한 경우

, 다음 long double 상수를 전달하거나 캐스팅 :

10.l 
(long double)10