무한 루프

컴퓨터에서 프로그램이 끝없이 동작하는 것

무한 루프(infinite loop)는 컴퓨터에서 프로그램이 끝없이 동작하는 것으로, 루프문에 종료 조건이 없거나, 종료 조건과 만날 수 없을 때 생긴다. 다중작업을 지원한 오래된 운영 체제는 한 프로그램의 무한루프에 전체 프로그램이 응답할 수 없게 만들었다.

의도하지 않은 무한 루프

편집

실수를 하여 무한 루프가 생길 수 있다. 무한 루프가 생기는지를 확인하는 일반적인 방법은 존재하지 않는다(정지 문제).

사례

편집
dim x as integer
do until x > 5
x = 1
x = x + 1
loop

루프문 안에 x=1이 들어있기 때문에, x는 1로 재정의되어 다음 행에서 x=2가 된다. 따라서 조건문을 탈출할 수 없다. x=1을 루프 앞으로 끄집어 내어 해결할 수 있다.

다음은 컴퓨터에서 변수가 기대하지 않은 성질을 가져서 무한 루프가 되는 사례이다.

float x = 0.1;
while (x != 1.1) {
  printf("x = %f\n", x);
  x = x + 0.1;
}

0.1이 10번 더해지면, 1.1이 되어야겠지만 실제로는 2진법 부동소수점으로 컴퓨터가 처리하므로 미세하게 다르기 때문에 무한루프가 된다. 이러한 문제는 x가 정해진 수와 같을 때 멈추는 조건을 부등호로 변경하여 해결할 수 있다.

같이 보기

편집

외부 링크

편집