커뮤니티

문의 드립니다.

프로필 이미지
뚱띵
2011-12-23 13:55:35
515
글번호 46004
답변완료
항상 감사합니다. 반올림 함수(round)와 관련해서... 아래의 두개의 값이 다르더라구요. value1 = round(111.5,0) --->112 value1 = round((5.30+5.85)/2*20,0) ---> 111 둘다 값이 111.5인데 round를 하면 하나는 112로 제대로 나오고 하나는 111로 나오는데 어떻게 된 것인가요. 문의드립니다.
지표
답변 2
프로필 이미지

tao

2011-12-23 15:16:17

tao 님에 의해 삭제된 답변입니다.
프로필 이미지

예스스탁 예스스탁 답변

2011-12-26 13:26:26

안녕하세요 예스스탁입니다. 해당 사항은 랭귀지 자체의 오류는 아니며 컴퓨터의 실수연산시 발생하는 오류입니다. 이문제는 근본적으로 프로세서가 실수를 부동소수점형태의 테이터 표현방식을 사용함으로 인해서 소수를 이진수로 변환하는 과정에서 생기는 문제로 대부분의 컴퓨터에서 동일하게 일어나는 문제입니다. (5.30+5.85)/2*20 가령 위 계산 결과값이 111.50으로 계산값이 표시되지만 실제 111.49999999 값으로 이 값을 소숫점 1자리에서 반올림하면 4를 만올림한 것이 되어 111.00을 가지에 되는 문제입니다. 아래와 같이 필요한 자리수에서 반올림한 값을 먼저 취하신 후 다시한번 round함수를 이용해서 1자리에서 반올림한 값을 취하도록 식을 만들어 주셔야 합니다. value1 = round((5.30+5.85)/2*20,4); value2 = round(value1,0); plot1(value2); 인터넷에서 double 연산오류등 검색하시면 관련 오류에 대해 자세한 내용을 확인하실 수 있습니다 즐거운 하루되세요 > 뚱띵 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 항상 감사합니다. 반올림 함수(round)와 관련해서... 아래의 두개의 값이 다르더라구요. value1 = round(111.5,0) --->112 value1 = round((5.30+5.85)/2*20,0) ---> 111 둘다 값이 111.5인데 round를 하면 하나는 112로 제대로 나오고 하나는 111로 나오는데 어떻게 된 것인가요. 문의드립니다.