해결된 질문
작성
·
76
1
3.12 부동소수점의 한계에서 underflow 오류의 예시를 들어줄 때 FLT_TRUE_MIN의 값을 copy해서 사용하셨는데 min과 true_min의 차이가 궁금합니다. normalized의 차이인 것 같은데 자세히는 모르겠어요 ㅠㅠ
답변 2
1
안녕하세요? 질문&답변 도우미 Soobak 입니다.
FLT_MIN
과 FLT_TRUE_MIN
의 차이는 말씀하신 내용처럼 정규화 여부에 있습니다.
즉, 가수 표현 방식과 지수의 사용 범위가 다릅니다.
부동 소수점 자료형은 이전 강의에서 학습하신 내용처럼,
IEEE 754 라는 표준에 의해 1
비트의 부호비트, 8
비트의 지수부와 23
비트의 가수부로 나뉩니다. 이 때, 표준에 의한 정규화된 숫자는 가수 앞에 항상 1.
이 있다고 가정합니다.
즉, 부동 소수점을 표현하는 표준에 의하여 정규화된 숫자의 표현 방식은 가수부의 가장 앞 비트를 암시적으로 1
로 유지합니다.
따라서, 실제 저장공간을 차지하지 않지만 가수부가 1.xxx...
형태를 가진다고 가정하여, 23
비트의 가수부에 암시적 1
을 더한 범위로 유효숫자를 표현할 수 있도록 합니다.
반면, FLT_TRUE_MIN
은 비정규화된 숫자로, 정규화된 숫자의 최소값보다 더 작은 값에 대해서 0
(언더플로우)이 아닌 값으로 표현하기 위해 사용됩니다.
정규화된 숫자와 다르게 1.xxx...
에서 암시적인 1
이 사라지고, 실제로 저장된 23
비트만 유효 숫자 계산을 위해 사용됩니다.
따라서, 정밀도는 줄어들지만 정규화된 숫자로 표현했을 때 0
으로 언더플로우가 발생할 수도 있는 매우 작은 수들을 표현할 수 있게 됩니다.
각각의 최소값은 강의 중 확인하신 내용처럼 약 1.17549435 × 10−38
과 약 1.40129846 × 10−45
이며, 부동소수점 숫자의 표현 효율성 측면에서 설계된 방식입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 새싹비빔밥님.
FLT_MIN과 FLT_TRUE_MIN의 차이에 대해 질문해 주셨군요. 이 개념은 부동소수점 숫자 표현에서 매우 중요한 부분을 차지합니다.
FLT_MIN은 “normalized” 부동소수점 숫자 중에서 가장 작은 값을 나타냅니다. 이는 소수점 이후의 가수 값이 가능한 최대 자리 수로 표기된 값을 뜻하며, 정규화되지 않은 소수에 비해서 더 안정적인 표현을 지원합니다.
반면에, FLT_TRUE_MIN은 “denormalized” 또는 “subnormal” 숫자 중 가장 작은 양수 값을 의미합니다. denormalized 숫자는 가장 작은 정규화된 숫자보다 더 작은 숫자를 표현할 수 있게 해 주며, 이는 0에 매우 가까운 값을 표현하는 데 사용됩니다. 이러한 숫자는 정확도는 떨어질 수 있지만, 부동소수점 표현에서 갑작스런 underflow(언더플로우)를 방지하는 데 도움을 줍니다.
자세한 설명과 예시를 보시려면 아래의 링크를 참고해주세요:
- 질문 링크: 실수 표현의 이해
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그렇군요 감사합니다~!