안드로이드 개발 질문/답변
(글 수 45,052)
float aa=-0.3f;
float bb=0.30000305f;
float cc=aa+bb;
결과: cc의 값은 3.0398369E-6 으로 나오네요?
cc값이 0.00000305 로 나올줄 알았는데 왜 엉뚱한값이 나오는거죠?
2012.08.12 11:08:16
float aa=-0.3f;
float bb=0.30000305f;
float cc=aa+bb;
double dd=-0.3f;
double ee=0.30000305;
double ff=dd+ee;
이렇게 해서 해봤는데.. 결과는 똑같던데요..
미치겠네요....왜이러죠?
디버깅에서.. 값체크한 이미지를 참고로 올립니다....
2012.08.12 14:47:22
뭐, 저정도면 정확해 보입니다만...
예상값 = 0.00000305
계산값 = 0.0000030398369
오차는 = 0.000000010, 그러니까 1.0E-8. = 1억분의 1 오차 입니다.
2진수로 처리하기 때문에 10진수 실수에서 이정도 오차는 항상 발생 합니다.
그리고, double dd=-0.3f; 로 하지 마시고 "f" 를 제거하세요.
사족
float 는 32bit(4byte) 변수입니다.
부호 1bit, 지수 8bit, 가수 23bit 입니다.
2^23 은 약 8,388,608, 그러니까 정밀도가 7자리밖에 안됩니다.
2012.08.12 17:05:19
설명하기 힘들어서 제가 작업한 이클립스 화면 캡쳐 를 이미지로 올립니다
꼭좀 봐주세요...
JINASYS님처럼 .계산값이 0.0000030398369 나오는게 아니라 3.0398369E-6 이 나옵니다
double 로도 해보셨나용?
부동 소수점 연산은 생각보다 정확하지 않을때가 있긴 합니다..