언더플로
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
언더플로는 부동 소수점 연산에서 표현 가능한 가장 작은 양수 값보다 작은 결과를 처리하는 현상을 의미한다. 언더플로 갭은 가장 작은 양의 정규 부동 소수점 값과 0 사이의 간격으로, 과거에는 이 갭을 0으로 처리하여 "0으로 플러시" 방식을 사용했다. IEEE 754 표준은 비정규수를 도입하여 "점진적 언더플로"를 가능하게 했으며, 언더플로 발생 시 정밀도 손실이 있는 경우에만 신호를 발생시키도록 규정한다. 언더플로는 상태 비트 설정, 예외 발생, 인터럽트 생성 등 다양한 방식으로 처리될 수 있으며, 머신 엡실론은 언더플로 레벨과 관련이 있는 개념이다.
더 읽어볼만한 페이지
| 언더플로 | |
|---|---|
| 컴퓨터 과학의 조건 | |
| 정의 | 산술 연산의 결과가 해당 연산에 할당된 저장 공간보다 작은 경우 발생하는 조건 |
| 발생 시점 | 결과가 표현 가능한 가장 작은 값보다 작을 때 |
| 반대 현상 | 오버플로 |
| 예시 | 유한 정밀도로 표현된 가장 작은 양수에서 더 작은 값을 빼는 경우 |
| 처리 방법 | 예외 발생 특정 값으로 포화 래핑 |
| 영향 | 부정확한 결과 프로그램 오류 보안 취약점 |
| 정수 언더플로 | |
| 정의 | 정수 연산의 결과가 표현 가능한 최소 정수값보다 작을 때 발생하는 현상 |
| 동작 방식 | 값이 최댓값으로 "래핑"될 수 있음 |
| 발생 가능성 | 부호 없는 정수 자료형에서 음수 값을 빼는 경우 |
| 보안 문제 | 버퍼 오버플로와 같은 보안 취약점을 유발할 수 있음 |
| 부동 소수점 언더플로 | |
| 정의 | 부동 소수점 연산 결과가 너무 작아서 정규화된 숫자로 표현할 수 없을 때 발생하는 현상 |
| 결과 | 0으로 반올림될 수 있음 NaN (Not a Number)으로 처리될 수 있음 |
| 중요성 | 대부분의 경우 심각한 문제를 일으키지 않음 |
2. 언더플로 갭
언더플로 갭은 표현 가능한 가장 작은 양의 정규 부동소수점 값과 0 사이의 간격을 의미한다. 이 간격은 인접한 정규 부동소수점 값 사이의 거리보다 훨씬 크다. 과거 설계에서는 언더플로 갭에 0이라는 하나의 값만 사용 가능했다. 언더플로 발생 시 실제 결과는 0으로 대체되었으며, 이를 "0으로 플러시"라고 불렀다. IEEE 754-1984 표준에서는 비정규수를 도입하여 언더플로 갭을 채우는 "점진적 언더플로" 방식을 도입했다.[8]
2. 1. 언더플로 갭의 크기
- ''fminN''과 ''fminN'' 사이의 간격을 언더플로 갭이라고 하며, 여기서 ''fminN''은 가장 작은 양의 정규 부동소수점 값이다. 이 간격의 크기는 갭 바로 바깥에 있는 인접한 정규 부동 소수점 값 사이의 거리보다 여러 자릿수나 더 크다. 예를 들어, 부동 소수점 데이터 유형이 20 비트를 표현할 수 있다면, 언더플로 갭은 갭 바로 바깥에 있는 인접한 부동 소수점 값 사이의 절대 거리보다 221배 더 크다.[7]
갭 바로 바깥에 있는 인접한 부동 소수점 값 사이의 절대 거리는 머신 엡실론이라고 하며, 일반적으로 해당 부동 소수점 방식에서 값 1과의 합이 값 1의 결과를 생성하는 가장 큰 값으로 특징지어진다.[9] 머신 엡실론은 언더플로 레벨과 혼동해서는 안 되지만(비정규수를 가정), 밀접하게 관련되어 있다. 머신 엡실론은 가수를 구성하는 비트 수에 따라 달라지는 반면, 언더플로 레벨은 지수 필드를 구성하는 자릿수에 따라 달라진다.
2. 2. 0으로 플러시 (Flush to Zero)
과거 설계에서는 언더플로가 발생하면 실제 결과 값을 0으로 대체하는 "0으로 플러시" 방식을 사용했다.[7]2. 3. 점진적 언더플로 (Gradual Underflow)
IEEE 754-1984 표준에서는 비정규수를 도입하여 언더플로 갭을 채우는 "점진적 언더플로" 방식을 도입했다.[8] 비정규수는 언더플로 갭을, 그 갭 바로 바깥의 인접한 값과 동일한 절대 거리를 가지는 값들로 채운다. 이를 통해 가능한 경우 가장 가까운 정규 값을 사용하는 것처럼 가장 가까운 비정규 값을 사용할 수 있다.[8] 점진적 언더플로를 사용하더라도 가장 가까운 값은 0이 될 수 있다.[8]3. 언더플로 처리
언더플로는 상태 비트를 설정하거나, 예외를 발생시키거나, 하드웨어 수준에서 인터럽트를 생성하는 등 다양한 방식으로 처리될 수 있다. 이러한 효과들이 조합되어 나타날 수도 있다. 사용자가 언더플로에 대해 트랩을 설정한 경우에는 정밀도 손실 여부와 관계없이 언더플로가 처리될 수 있다.[1]
3. 1. IEEE 754 표준
IEEE 754 표준에서는 정밀도 손실이 있는 경우에만 언더플로 신호를 발생시키도록 명시하고 있다.[1] 일반적인 처리 방식은 언더플로 발생 여부를 부동소수점 상태에 기록하는 것이다.[1]4. 머신 엡실론과의 관계
머신 엡실론은 1에 더했을 때 1과 다른 결과를 만드는 가장 큰 값으로,[9] 로 표현할 수 있다. 여기서 는 실수 값을 부동 소수점 표현으로 변환하는 함수이다. 머신 엡실론은 언더플로 레벨과 혼동하기 쉽지만, 밀접하게 관련되어 있다. 머신 엡실론은 가수를 구성하는 비트 수에 따라 달라지는 반면, 언더플로 레벨은 지수 필드를 구성하는 자릿수에 따라 달라진다. 대부분의 부동 소수점 시스템에서 언더플로 레벨은 머신 엡실론보다 작다.
참조
[1]
논문
An implementation guide to a proposed standard for floating-point arithmetic
1980
[2]
웹사이트
CWE-191: Integer Underflow (Wrap or Wraparound) (3.1)
https://cwe.mitre.or[...]
[3]
웹사이트
Overflow And Underflow of Data Types in Java
https://dzone.com/ar[...]
[4]
웹사이트
Integer Overflow/Underflow and Floating Point Imprecision
https://medium.com/@[...]
2017-04-04
[5]
웹사이트
Integer underflow and buffer overflow processing MP4 metadata in libstagefright
https://www.mozilla.[...]
[6]
웹사이트
Avoiding Buffer Overflows and Underflows
https://developer.ap[...]
[7]
서적
Numerical Computation Guide
https://docs.oracle.[...]
Oracle
2018-04-21
[8]
논문
Underflow and the Reliability of Numerical Software
1984
[9]
서적
Scientific Computing
McGraw-Hill
2002
[10]
서적
2013
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com