강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

새싹비빔밥님의 프로필 이미지
새싹비빔밥

작성한 질문수

홍정모의 따라하며 배우는 C언어

3.12 부동소수점형의 한계

FLT_MIN과 FLT_TRUE_MIN의 차이

해결된 질문

작성

·

76

1

3.12 부동소수점의 한계에서 underflow 오류의 예시를 들어줄 때 FLT_TRUE_MIN의 값을 copy해서 사용하셨는데 min과 true_min의 차이가 궁금합니다. normalized의 차이인 것 같은데 자세히는 모르겠어요 ㅠㅠ

답변 2

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

FLT_MINFLT_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(언더플로우)를 방지하는 데 도움을 줍니다.

자세한 설명과 예시를 보시려면 아래의 링크를 참고해주세요:
- 질문 링크: 실수 표현의 이해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

새싹비빔밥님의 프로필 이미지
새싹비빔밥

작성한 질문수

질문하기