C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[29036] [질문] 최적화(Optimization) 옵션과 관련된 이상 문제의 해결 방법은?
구철회 [chouoo] 836 읽음    2004-03-13 10:49
최근에 gcc로 프로젝트를 개발하고 있는데 NaN(Not a Number)라는 것이 나와서 속을 썩이고 있습니다. 현재 여러가지로 샘플을 만들어서 테스트하고 있는데요.

컴파일러의 최적화 옵션에 따라서 결과가 다르게 나와서 문의를 합니다.

아래는 간단한 코드입니다.

unsigned int *pa;
float t = 3.14;

pa = (unsigned int *)&t;
*pa = 0xffffffff;   /* t를 강제적으로 NaN으로 만들어 줌 */

printf("t is %le\n", t);
printf("t is %le\n", t);
if( t != t )
    printf("t is %le\n", t);

원래 생각했던 데로 하면
t is NaN
t is NaN
t is NaN
이렇게 나와야 합니다. gcc에서 컴파이러 옵션을 -O0 또는 -O1을 주면 이렇게 나옵니다.
그렇지만 좀 더 높은 최적화 수준인 -O2 또는 -O3 를 주면
t is 3.140000e+00
t is NaN
t is NaN
이렇게 나오네요.

제가 생각하기에 *pa = 0xffffffff 하는 것이 t의 값에 영향을 주지 않는다고 최적화해버려 처음 printf 문에서는 기존 캐쉬에 가지고 있던 것을 찍는 것 같고 그러면서 t의 값을 업데이트해서 다음 printf 문에서는 정상적으로 찍는 것 같습니다.

현재는 -O2로 컴파일 하고 있는데 계속 -O2로 컴파일하면서
t is NaN
t is NaN
t is NaN
이렇게 나오게 하고 싶습니다. 어떻게 해야 할까요?


+ -

관련 글 리스트
29036 [질문] 최적화(Optimization) 옵션과 관련된 이상 문제의 해결 방법은? 구철회 836 2004/03/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.