|
십진수를 이진수로 바꾸면서 발생하는 오차도 있고 자료형에 따는 유효자릿수의 문제도 있어요
자릿수가 아주 많은 수를 그나마 정확하게 표기하거나 계산하려면 노트에 손으로 써가며 계산하듯이 하는 함수를 만드셔야 해요.
double 형의 경우 소수점 아래 수에 해당하는 비트수가 52개이므로 이진수로는 52자리 십진수로는 대략 16자리의 유효자릿자를 표시할 수 있어요. 참고로, 값(수)은 정규화돼서 지수형으로 저장돼요.
제시하신 수의 경우 유효자릿수가 십진수로 15개네요.
그런데 이 수를 이진수로 변환하면서 발생하는 오차는 유효자릿수가 적어서 충분히 만회할 여지가 없겠네요.
이진수로 정확하게 변환할 수 없는 십진 실수가 있어요. 그 경우 자료형의 유효자릿수가 충분하면 충분히 근사가 되지만 그렇지 않은 경우에는 오차가 커져요.
아카이나 님이 쓰신 글 :
: 핸드폰에 계산기들을 보면 99999999999999.9-99999999999999.8 을 하면 0.1이 아니라 0.1038 인가 이런식으로
:
: 나오고 있습니다.
:
: 저도 이걸보고 전에 만든 계산기를 동작 해보니까 똑같은 증상을 보이고 있는데요
:
: double형이 잡아먹는 메모리 자리수가 16칸인가? 17칸으로 되있고 역시나 부동소수점 관련해서
:
: 문제 인거 같습니다.
:
: 이걸 고쳐볼려고 몇일을 해봤는데 생각대로 잘 안되고 있습니다 ㅠ.ㅠ
:
: 고수 여러분 도와주세요. . . .
:
:
: 새삼 스럽게 요즘에 와서야 윈도우 계산기의 위대함을 알았습니다 . . .
|