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

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[237] 부동 소수점 변수 사용시 범할 수 있는 오류
김시환 [godson2] 27451 읽음    2013-10-24 22:55
아래 함수는 분명 논리적으로는 전혀 문제가 없는 코드입니다. 하지만 이 코드에는 아주 치명적인 버그가 숨어 있습니다.
이 문제에 대해 인지를 하고 있음에도 불구하고, 아무생각없이 코딩을 하다보면 오류를 무시하고 코딩을 하게 됩니다.
파라메타 설정값에 따라 아주 정상적으로 수행을 하기 때문에 오류를 무시하기 아주 딱입니다.

오늘도 이 문제 때문에 광주까지 출장을 다녀왔네요.( 물론 이게 핵심을 아니었지만...)

void double_test(double start, double step, double stop)
{
    double temp = start ;

    while(true)
    {
        function(temp) ;

        temp = temp + step ;

        if(temp > stop) break ;
    }
}

이 버그는 일반적으로는 아주 정상적으로 수행을 하지만, 특정한 값에서 비정상적으로 수행을 합니다. 바로 부동소수점 변수 때문입니다.

start=0, step=0.1, stop=5  일 경우 function 함수는 51번 수행되지만
start=0, step=0.1, stop=3  일 경우 function 함수는 30번 수행됩니다. 1번의 수행을 덜하게 됩니다.

이 함수의 치명적인 버그의 내용을 확인해 보려면 아래와 같이 코드를 수정한 후 테스트 해 보시면 됩니다.

void double_test(double start, double step, double stop)
{
    double temp = start ;
    int imsi ;

    while(true)
    {
        imsi = temp * 100 ;
        printf("%d\n", imsi) ;
        temp = temp + step ;

        if(temp > stop) break ;
    }
}

김정모 [jeongmo]   2019-01-23 17:12 X
아래 주소에서 도움이 될만한 것을 찾으실 수 있으실껍니다.
결론만 말하면 부동소숫점을 쓸땐 조심하셔야 합니다.

http://rvelthuis.de/articles/articles-floats.html

+ -

관련 글 리스트
237 부동 소수점 변수 사용시 범할 수 있는 오류 김시환 27451 2013/10/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.