상담문의

ㆍ HOME > 상담문의 > 정보처리기사 실기
제 목 캐스팅 버그입니다.(답변2)
글쓴이  권우석작성일 2005-04-17조회수 613
글공유
게시글을 twitter로 보내기게시글을 facebook으로 보내기게시글을 Me2Day로 보내기게시글을 요즘으로 보내기

Option Explicit
Sub main()
    Dim 값(3) As Double
    Dim 합계 As Long
    값(1) = 20.1
    값(2) = 30.3
    값(3) = 40.1
    합계 = 값(1) + 값(2) + 값(3)
    MsgBox 합계
End Sub
                                        그런데  이프로그램에선 합계값이 91이 나왔습니다..



 



=> 이 부분을 설명하기가 참 어렵네요...



''세'' Double 타입 수를 더하니 이상하더라." 요건데..

위에서 정확히 0.5일 때만 근짝수 반올림을 한다고 이미 했는데요,

그러면 세 Double 타입 수를 더하면 0.5가 아니라 더 큰 수가 나온다고 볼 수 있습니다.



아래 예제를 좀 보면요..(단, 값()은 Double이고 합계는 Long임)

    값(1) = 20.125
    값(2) = 30.25
    값(3) = 40.125
    합계 = 값(1) + 값(2) + 값(3)
    MsgBox 합계  ''90
    
    값(1) = 20.1
    값(2) = 30.3
    값(3) = 40.1
    합계 = 값(1) + 값(2) + 값(3)
    MsgBox 합계  ''네번째 경우죠. 91
    
    값(1) = 20.125
    값(2) = 30.225
    값(3) = 40.15
    합계 = 값(1) + 값(2) + 값(3)
    MsgBox 합계   ''90
    
    값(1) = 20.175
    값(2) = 30.3125
    값(3) = 40.0125
    합계 = 값(1) + 값(2) + 값(3)
    MsgBox 합계   ''91
    

그리고 두 Double 수의 연산의 경우에

    값(1) = 20
    값(2) = 30.5
    합계 = 값(1) + 값(2)
    MsgBox 합계   ''50

    값(1) = 20.15
    값(2) = 30.35
    합계 = 값(1) + 값(2)
    MsgBox 합계   ''50
    
    값(1) = 20.1
    값(2) = 30.4
    합계 = 값(1) + 값(2)
    MsgBox 합계  ''50

이란 말이죠.

그러니까 이상하게 세 Double 타입 수만 더하면 그러는건데...

그래서 4개 5개로도 테스트를 해봤는데 상당히 재밌는 결과가 나왔습니다.

하나의 변수로 0.5를 몰아주면 근짝수 반올림이 되고,

0.4와 0.1로 나눠서 저장해도 역시 같은 결과가 나왔는데,

엉뚱하게 0.3, 0.1, 0.1로 나눠주니 일반 반올림이 되버렸다는 겁니다.

0.2, 0.1, 0.1, 0.1 도 마찬가지였고, 각각 0.1만 해도 마찬가지였습니다.




그런데.

이런 연산을 C로 해봤더니 그런 현상은 전혀 없었습니다.

C의 연산이 다분히 저급언어적임을 고려하면, VB에서의 이러한 현상이 자동 타입 캐스트의 문제라는 것을 대번에 짐작할 수 있었습니다.



이긍....

그래서 결론...



캐스팅 과정에서 발생한 버그임....



참고로...



http://support.microsoft.com/kb/q196652/



를 읽어 보시면 좋을 듯... 지금까지 답변은 여러 고수님의 의견을 조합한 답변이였습니다.



이해가 많이 어려울 듯 합니다. 설명이 부족한 듯 하네요...즐거운 주말 저녁되세요.



 

댓글쓰기 :
이전글 오류
다음글 문제가 안 풀려여..ㅠ.ㅠ
고객지원센터

02-556-3650

평일 9:00~18:00

일요일 공휴일 휴무

계좌번호안내

농협은행 724-01-173541

국민은행 633601-04-044665

예금주 (주)조은캠프

상호명 : (주)조은캠프 ㅣ 대표이사 : 이유락 ㅣ 대구광역시 북구 대학로80 경북대학교 IT융합산업빌딩 11층
사업자번호 : 504-81-62507 ㅣ 본사 : 053-954-0030 ㅣ 기술지원 : 070-7019-1144 ㅣ 팩스 : 050-7711-2200 ㅣ 
원격평생교육시설13호 ㅣ 출판사 : 345-2005-00013 ㅣ 통신판매업 : 2005-대구북구-00158 ㅣ 정보보호책임자 : 김창연  
기사친구는 SSL보안방식의 암호화구간을 적용하여 사이트를 안전하게 이용하실 수 있습니다.
COPYRIGHT 2005 (주)조은캠프 ALL RIGHTS RESERVED.관리자에게 메일보내기