오버플로우 관련 이미지를 찾는데 뭔 애니메이션이 있더라.. 이미지가 없으면 허전하니까 히로인만 슥 그려봤다.

우선 overflow는 다들 알거라고 생각한다.

예를 들어 4바이트의 크기를 가지는 정수 자료형인 경우 2^31 - 1 에서 1을 더하면 -(2^31)로 바뀌는 뭐 그런 현상들이다.

 

그러나 한글로 구글링을 좀 해보면 -(2^31) - 1이 2^31 - 1로 변하는 현상을 underflow라고 지칭하는 경우를 매우 많이 보게 된다. 즉 음수값이 절대값 max를 넘기면 양수가 되는 현상을 underflow라고 소개하는 포스팅이 많다. (영문으로 검색하면 제대로 된 정의를 찾을 수 있다)

 

 

이에 아래와 같이 밝혀둔다.

 

1. 정확히는 상한 뿐 아니라 하한을 넘겨서 반대쪽 값이 나오는 경우도 모두 overflow이다. 정수나 unsigned 자료형에서 하한 max값을 넘어서 반대쪽 값이 나오는 현상이라고 해서 underflow가 아니다.

 

2. IEEE 754의 부동소수점 기술표준에 의하면 부동소수점으로 표현할 수 없는 절대값이 매우 작은 값을 표현하려 할 때 -0 혹은 +0으로 표현되는 현상(단, 두 경우 모두 부호 없이 0으로 표기된다)이 underflow이다.

 

3. 그게 그거 아니냐고 생각할 수 있는데, 정수 산술계산중에 캐리가 올라가서 반대쪽 값이 튀어나오는거랑 부동소수점에서 표현할 수 없는 절대값이 아주 작은 값을 0으로 고정해버리는 동작은 절대 같다고 볼 수 없다. 따라서 구분짓는게 옳다.

 

4. 영어로는 arithmetic underflow를 underflow라고 부른다. 하지만 정수나 unsigned 자료형에서 하한 max값을 넘어서 반대쪽 값이 나오는 경우에 underflow라는 명칭을 붙이고 싶은 경우 integer underflow라고 부르기도 하는 것 같다.

 

 

사실 뜻은 통하니까 실제로 잘못 말하는 사람이 있어도 그러려니 하고 넘어가긴 한다. 하지만 용례는 용례고, 정확한 정의는 짚고 넘어가는게 옳으니 대충이나마 설명해서 써둔다. 전공자라면 논리회로 강의 초반에 다뤄지는 내용이니 되새겨보자.

+ Recent posts