커뮤니티

FracPortion

프로필 이미지
ujm
2016-03-29 14:04:37
76
글번호 96675
답변완료
수고하십니다. plot1(FracPortion(3.15/0.05)); 3.15를 0.05로 나눈수의 소수부분은 0으로 알고있는데, 1이라는 결과가 나옵니다. 왜 그런가요?
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-03-29 17:27:02

안녕하세요 예스스탁입니다. 해당 내용은 컴퓨터의 부동소숫점 오류입니다. 원래 리턴값이 63인데 62.99999999가 나올수도 있고 63.00000000001과 같이 리턴될수도 있습니다 plot1(FracPortion(3.15/0.05)); MessageLog("%.20f %.20f",3.15/0.05, FracPortion(round(3.15/0.05,5))); 위 식 적용하시고 디버깅창을 보시면 첨부된 그리과 같이 3.15/0.05가 63이 아닌 62.9999999와 같이 리턴되는 것을 보실수 있습니다. 그에따라 FracPortion(3.15/0.05))값도 0.9999999와 같은 값입니다. 차트에 1로 나오는것은 차트는 표시 자리수가 제한이 있어 반올림되어 보여진것입니다. 부동소숫점 오류는 인터넷에서 검색하시면 많은 글 보실수 있는데 컴퓨터에서 계산을 할때 숫자를 2진수로 변경해서 계산후 10진수로 다시 돌려주게 되는데 이때 발생하는 내용입니다. 해당 부분은 컴퓨터 CPU의 계산과정의 오류로 발생하는 것을 막을 방법은 없습니다. 해당부분은 수식안에서는 다른 방법은 없고 계산값을 수숫점 N자리를 정해서 반올림하는 방법뿐이 없습니다 아래는 넉넉히 5자리에서 값을 반올림한후에 소숫점값만 취하게 수정한 식입니다. plot1(FracPortion(round(3.15/0.05,5))); 즐거운 하루되세요 > ujm 님이 쓴 글입니다. > 제목 : FracPortion > 수고하십니다. plot1(FracPortion(3.15/0.05)); 3.15를 0.05로 나눈수의 소수부분은 0으로 알고있는데, 1이라는 결과가 나옵니다. 왜 그런가요?