2011-09-21 2 views
2

직장에서 우리는 MSVS2010 Ultimate을 가지고 있으며 실제 수치를 사용하여 철저한 시뮬레이션을 실행하는 프로그램을 작성하고 있습니다. 나는 사소한 반올림 오류가 발생하고 있으며 알고리즘이 가능한 한 안정적으로 유지되도록 합리적인 조치를 취했습니다.VS2010에서 긴 double 형의 Windows C++ 응용 프로그램 컴파일

128 비트 4 배 정밀도 부동 소수점 숫자로 변환하고 싶습니다 (long double, right?). 얼마나 차이가 나는지 확인하고 싶습니다.

나는 long doubledouble의 모든 관련 인스턴스를 교체 다시 컴파일하고 다시 내 더미 시뮬레이션을 실행하지만, 이전과 정확히 같은 결과를가했습니다.

이 C/C++에서 내 프로젝트의 속성 페이지 당 내 (디버그) 컴파일러 옵션은 다음과 같습니다

/ZI/NOLOGO/W3/WX-/OD/Oy-/D "_MBCS"/ GM/EHsc은/RTC1/GS/fp : 정밀/Zc : wchar_t/Zc : forScope /Fp"Debug\FFTU.pch "/ Fa"디버그 \ "/ Fo"디버그 \ "/Fd"Debug\vc100.pdb"/ Gd/analyze -/errorReport : queue

My dev CPU는 Core2 Duo T7300이지만 대상 컴퓨터는 i7이됩니다. 두 설치 모두 Windows 7 64 비트입니다.

+4

Visual C++에서 'long double'은 'double'과 동일하므로 결과가 동일한 http : // msdn입니다 Microsoft.com/ko-kr/library/s3f49ktz (v = VS.100) .aspx –

+0

참조. Windows의 VS2010에서 128 비트 4 배 정밀도를 얻을 수있는 다른 방법이 있습니까? (GMP와 같은 타사 라이브러리를 사용하지 않고 Windows.h는 괜찮습니다.) – Ozzah

+3

CPU가 128 비트 부동 소수점을 제공한다고 생각하십니까? x87은 32, 64 및 80 비트만 지원합니다 (저는 주제에 대해 전문가가 아니지만 SSE가 uberwise 부동 소수점 기능을 제공한다고 생각하지 않습니다). –

답변

2

gcc, 볼랜드 또는 인텔과 같은 타사 컴파일러로 전환 할 수 있습니다. 이들은 모두 long double을 8087의 확장 된 정밀도 인 8087의 고유 내부 형식으로 인식합니다.

+1

gcc-4.3.4에서 'sizeof (long double)'은 12입니다. [ideone.com] (http://ideone.com/TLbiS). VC++'double '은 부동 소수점 계산의 중간 결과를 저장하기 위해 80 비트 레지스터를 사용하지만 메모리에 64 비트로 저장됩니다. – JohnPS