1. 마지막 비트가 아니라 그 아래 비트에서 반올림을 한 거라고 생각됩니다. 일반적인 반올림하고 똑같습니다. 반 이상일 때 반올림을 해야 실제 값에 더 가까워진다는 논리입니다.
2. 둘 다 오차가 발생합니다. num = 0.3은 안 생긴다고 생각하신 이유가 있나요? https://ideone.com/vPGNrY
3. Python에서 말하는 float는 그냥 부동소수점의 영어 단어인 floating point를 의미할 뿐 단정도랑은 전혀 상관이 없는 단어입니다. 그냥 C/C++에서 float라는 단어를 단정도를 위해 사용하고 있을 뿐입니다.
zungwooker 2년 전
여러 언어에서 0.1 + 0.2 != 0.3 이라는 사실은 익히 알고 있는 사실이며
이는 0.1, 0.2, 0.3 을 완벽하게 표현할 수 없고 어림 값으로 표현하기에 생기는 오차가 원인으로 알고 있습니다.
부동소수점을 표현하는 방법인 IEEE 754에 관한 질문이 있습니다.
1.
0.1 (10) = 1.100110011001...*2^-4 (2)
0.2 (10) = 1.100110011001...*2^-3 (2) 으로 표현할 수 있으며
두 수의 합은
0.3 (10) = 1.001100110011..*2^-2 (2) 입니다. (제가 계산하였는데 틀렸다면 알려주세요)
배정도의 가수부는 52bit로 0.3을 배정도로 표현하였을 때 가수부는 "001100110011...0011"이라 생각하여
이로 계산해보니 0.3보다 작은 0.29999..가 되고
마지막 bit에서 반올림해주니 통용적으로 사용되는 값이 도출되었습니다.
왜 마지막에 반올림을 해주는 것인가요?
반올림을 해주는 기준이 무엇인가요?
어디까지가 유효숫자인가요?
2.
0.1과 0.2, 0.3은 모두 어림 값인데
합의 결과는 오차가 생기고 특정 변수에 초기화(num = 0.3) 같은 결과는 오차가 생기지 않는 이유가 무엇인가요?
3.
Python에서 type(0.3)은 float인데 배정도를 사용하는 이유는 무엇인가요?
긴 글 읽어주셔서 감사합니다.
오늘도 좋은 하루 보내세요.