2013-04-16 6 views
0

고정 소수점 구현을 수행하고 있으며 테스트를 실행하고 있으며 cmath 헤더의 연산 정밀도로 내 고정 소수점 연산의 정밀도를 확인하려고합니다. 그래서 여기비교를위한 .cpp 파일의 두 네임 스페이스

는 위의 코드가 잘 테스트

#include <fixed_point_header.h> 
#include <stdio.h> 


int main() 
{ 
    float fp1 = 3.14159; 
    float fp2 = 4.1723; 
    float fp3,fp4,fp5,fp6; 
    fp3 = fp1+fp2; 
    fp4 = fp1-fp2; 
    fp5 = fp1*fp2; 
    fp6 = fp1/fp2; 

    printf("float fixed point summation data ==%f\n",fp3); 
    printf("float fixed point difference data ==%f\n",fp4); 
    printf("float fixed point multiplied data ==%f\n",fp5); 
    printf("float fixed point divided data ==%f\n",fp6); 
} 

Test.cpp에 코드 내입니다,하지만 지금은 동일한 작업을 계산하고 같은 Test.cpp에에 cmath 헤더의 결과를 볼 필요가 파일. 그래서 어떻게 진행합니까, 두 개의 네임 스페이스 (하나의 네임 스페이스 파일, 하나의 네임 스페이스 표준)로 가능합니까?

#include <fixed_point_header.h> 
#include <stdio.h> 
#include <math.h> 

using namespace fp; 


    int main() { 

    ...// do the fixedpoint operations here 

    } 
    using namespace std; 

    int main() { 

    ...// do the cmath operations here 

    } 

같은

는 위의 코드처럼, 누군가가 진행하는 방법에 도움이 될 수 있습니다 가능한가. 귀하의 의견에 따라

감사

+0

그런 네임 스페이스를 사용할 수 없습니다. 주요 기능은 하나만있을 수 있습니다. 나는 당신이 무엇을하려고하는지, 같은 코드를 두 번 쓰지만 다른 명시 적 * 네임 스페이스를 쓰는 것이 잘못된 것은 무엇인가? 'using namespace ...; '를 사용하지 마십시오. 나는 당신이 네임 스페이스가 무엇인지에 대해 잘못된 생각을 가지고 있다고 생각한다. – john

+0

* "이제 동일한 작업을 계산하고 cmath 헤더의 결과를 볼 필요가 있습니다"* -이 뜻을 설명 할 수 있습니까? – JBentley

+0

@ john' 같은 코드를 두 번 쓰지만 다른 명시 적 네임 스페이스를 사용하는 것이 잘못된 이유는 무엇입니까? '그래서 두 개의 테스트 파일에 서로 다른 네임 스페이스를 사용하여 동일한 코드를 두 번 작성해야합니까? – Rd7

답변

1

답변 : fixed_point_header.h의

내용 :

namespace fp // This places your function inside the fp namespace 
{ 
    float pow(float base, float exp) 
    { 
     return 0; // Replace with your algorithm 
    } 
} 

소스 파일 :

#include <iostream> 
#include <cmath> 
#include "fixed_point_header.h" 

int main() 
{ 
    float f1 = 2.0; 
    float f2 = 3.0; 
    std::cout << pow(f1, f2) << std::endl;  // from cmath 
    std::cout << fp::pow(f1, f2) << std::endl; // from your header 
    return 0; 
} 

출력 :

8 
0 
+0

감사합니다. 차이점은 헤더 파일과 범위가없는':: scope'로 볼 수 있습니다. – Rd7

+0

네, 함수 이름 앞에'fp ::'접두사를 붙이면 (완전 정규화라고 함) 컴파일러에게'fp' 네임 스페이스 안에'pow' 함수 대신에'pow' 함수 대신'pow' 함수가 있음을 알립니다. 글로벌 네임 스페이스는 에서 가져 왔습니다. – JBentley

+0

include를'namespace X {#include

}'로 둘러 싸서 헤더를 네임 스페이스에 넣을 수도 있습니다. 이 작업은 좋지 않으며 일부 코드가 손상 될 수도 있지만 일부 경우에는 그렇게 할 수있는 유일한 방법이기도합니다. – dascandy