[ CnUnix ] in KIDS 글 쓴 이(By): Sequoia (매지동자) 날 짜 (Date): 2005년 9월 29일 목요일 오후 03시 47분 35초 제 목(Title): Re: single precision floating point� 문� 틀린게 아니라 다른거에요 ㅎㅎ float는 유효숫자의 자릿수가 제한되어있어서, 연산을 할때마다 유효숫자가 조금씩 잘려나갑니다. 내부적인 저장 방식은 표준을 찾아보시고요 --;;; 그러므로 컴퓨터에서의 실수 연산은 항상 오차가 발생할 수 있음을 감안하시 고, 오차가 생기는 매커니즘을 잘 파악해서 그 오차를 적절하게 최소화하도 록 주의를 기울이셔야 됩니다. 저도 정확하게 어느정도의 precision을 지원하는지는 모르겠는데, 예를 들어 0.0000001 + 0.0000002 + .... + 0.9999999 를 계산했을 때와, 0.9999999 + 0.9999998 + ... + 0.0000001 을 계산했을때의 차이를 보면 대강 어떤 식으로 오차가 발생하는 지 감이 올 겁니다. 구체적으로 말해서, 큰 숫자에 작은 숫자를 더했을 경우 큰 숫자의 유효숫자 범위 밖의 작은 숫자의 유효숫자는 완전히 무시되지요. 이 덧셈으로 인해 유 효숫자의 자리수가 올라갔을 경우 아래쪽 유효숫자는 또다시 잘려나갑니다. 이게 십진수가 아니라 이진수 기반에서 작동하기 때문에 정확한 예시를 들 수는 없고 대강 그런 시스템이라고 이해하시면 되겠습니다. 위의 예에서는 대충 어느정도 더해지고 나면 후자의 경우 이후 모든 덧셈이 무시되겠지요. 전자의 경우 착실하게 아래부터 쌓이기 때문에 후자보다 큰 숫 자가 결과치로 나옵니다. * 나는 아직도 배가 고프다. * |