Computer Science - C언어_하드웨어의 한계

Sangho Moon·2020년 7월 19일
0
post-thumbnail

컴퓨터는 RAM(Random Access Memory)이라는 물리적 저장장치를 포함하고 있다.

우리가 작성한 프로그램은 구동 중에 RAM에 저장되는데, RAM은 유한한 크기의 비트만

저장할 수 있기 때문에 때때로 부정확한 결과를 내기도 한다.


1. 부동 소수점 부정확성

아래와 같이 실수 x, y를 인자로 받아 x 나누기 y를 하는 프로그램이 있다고 해보자.

나눈 결과를 소수점 50자리까지 출력하기로 하고, x에 1을, y에 10을 입력하면 아래와 같은 결과가 나온다.

정확한 결과는 0.1이 되어야 하지만, float에서 저장 가능한 비트 수가 유한하기 때문에 다소 부정확한 결과를 내게 되는 것이다.


2. 정수 오버플로우

비슷한 오류로, 1부터 시작하여 2를 계속해서 곱하여 출력하는 아래와 같은 프로그램이 있다고 해보자.

여기서 for문의 ;는 true;와 같은 의미이다.

또 sleep(1);은 1초의 간격을 두기 위해 적용한 것이며

unistd.h 라는 라이브러리를 불러와야 사용할 수 있다.


변수 i를 int로 저장하기 때문에, 2를 계속 곱하다가 int 타입이 저장할 수 있는 수를 넘은

이후에는 아래와 같은 에러와 함께 0이 출력된다.

정수를 계속 키우는 프로그램에서 10억을 넘기자 앞으로 넘어갈 1의 자리가 없어진 것이다.

int에서는 32개의 비트가 다였기 때문에 그 이상의 숫자는 저장할 수 없는 것이다.


이런 오버플로우 문제는 실생활에서도 발견된다.

대표적인 예는 1999년에 큰 이슈가 되었던 Y2K 문제

비행기 보잉 787에서 구동 후 248일이 지나면 모든 전력을 잃는 문제가 있었다.


Ref.
Edwith_boost course

profile
Front-end developer

0개의 댓글