본문 바로가기

카테고리 없음

C언어 오버플로우와 언더플로우, 쓰레기값

float의 범위는 1.175494351 E - 38 ~  3.402823466 E + 38 이다. 이 범위를 곱하거나 나누면 오버플로우와 언더플로우가 발생해 0또는 무한대가 출력된다.

 

#include <float.h> // 실수 자료형의 양수 최솟값, 최댓값이 정의된 헤더파일
#include <stdio.h>

int main() {
  float num1 = FLT_MIN; // float 양수 최솟값
  float num2 = FLT_MAX; // float 양수 최댓값

  num1 = num1 / 100000000.0f;
  // float 양수 최솟값에 100000000.0을 나누면 수가 아주 작아져서 언더플로우 발생

  num2 = num2 * 1000.0f;
  // float 양수 최댓값에 저장할 수 있는 범위를 넘어서서 오버플로우 발생

  printf("%e %e\n", num1, num2);
  // 0.000000e+00 inf 언더플로우 0, 오버플로우 무한대

  return 0;
}

 

C 언어에서는 실수 언더플로우를 0또는 쓰레기값으로 처리한다. 오버플로우는 무한대 inf가 출력된다.