프로그래밍 갤러리에서 놀고 있었는데(...) 흥미로운 떡밥 하나가 올라왔다.
나도 모르게 덥썩 물어버렸다(...)
문제의 코드는 이것
글쓴이 말로는, VC++ 6 과 VS.net 2005 가 계산 결과가 다르게 나온다는 것이었다.
비슷한 문제를 GpgStudy 에서 찾을 수 있었다.
해결 방법 외에도 정확한 설명이 나와 있어서 기반 지식까지 쌓을 수 있었다.(물론 MSDN에 있는 내용... 이라지만 영어보다는 한글 설명이...^^;; 그리고 좀 덜 딱딱한 문체이기도 하고...)
답만 정리하자면, VC++ 6는 컴파일 옵티마이징 옵션중에 /Op (Improve Float Consistency)를 켜면 되고, VS 2008 은 기본이 /fp:precise (/Op를 대체) 로 되어 있어서 신경쓰지 않아도 된다.
이렇게 하면 위의 코드 실행 결과 VC++ 6 도 452.376007 이 나오게 된다.
자세한 것은 MSDN 자료를 참조하자.
vc++ 6 : http://msdn.microsoft.com/en-us/library/aa984742(VS.71).aspx
VS.net 2005~ : http://msdn.microsoft.com/ko-kr/library/e7s85ffb(VS.80).aspx
ps. 코드 하일라이트가 c/c++ include 태그 부분은 깔끔하지가 못한듯... 내가 잘못 쓴 건가...-_-;;
나도 모르게 덥썩 물어버렸다(...)
문제의 코드는 이것
#include
int main(void)
{
float radius;
float area;
printf("원의 반지름 입력 : ");
scanf("%f", &radius);
area = radius*radius*3.1415;
printf("원의 넓이 : %f \n", area);
return 0;
}
|
글쓴이 말로는, VC++ 6 과 VS.net 2005 가 계산 결과가 다르게 나온다는 것이었다.
동강꺼랑 코드는 똑같애 12.0 입력했을 경우
내가 나온 값(VS.net 2005)은 452.376007
동강 나온 값(VC++6)은 452.376000
비슷한 문제를 GpgStudy 에서 찾을 수 있었다.
해결 방법 외에도 정확한 설명이 나와 있어서 기반 지식까지 쌓을 수 있었다.(물론 MSDN에 있는 내용... 이라지만 영어보다는 한글 설명이...^^;; 그리고 좀 덜 딱딱한 문체이기도 하고...)
@ assert의 버그?
답만 정리하자면, VC++ 6는 컴파일 옵티마이징 옵션중에 /Op (Improve Float Consistency)를 켜면 되고, VS 2008 은 기본이 /fp:precise (/Op를 대체) 로 되어 있어서 신경쓰지 않아도 된다.
이렇게 하면 위의 코드 실행 결과 VC++ 6 도 452.376007 이 나오게 된다.
자세한 것은 MSDN 자료를 참조하자.
vc++ 6 : http://msdn.microsoft.com/en-us/library/aa984742(VS.71).aspx
VS.net 2005~ : http://msdn.microsoft.com/ko-kr/library/e7s85ffb(VS.80).aspx
ps. 코드 하일라이트가 c/c++ include 태그 부분은 깔끔하지가 못한듯... 내가 잘못 쓴 건가...-_-;;
'Dev.Programming > Tip.Tech' 카테고리의 다른 글
| CVS loginfo(post-commit trigger) 작업 (0) | 2008/09/10 |
|---|---|
| ASP로 AJAX & Cross Domain 해결하기 (0) | 2008/08/04 |
| VC++ 부동소수점 계산의 정확도를 높이는 방법 (0) | 2008/08/04 |
| Design Pattern Quick Reference (0) | 2008/02/13 |
| MSDN KB : Windows Service는 네트워크 드라이브 매핑(WNet API)을 사용하지 말고 UNC 이름(경로)을 이용하라 (0) | 2008/01/15 |
| Oracle SQL Developer를 사용한 MS-SQL -> Oracle Quick Migration (0) | 2007/10/19 |


