프로그래밍의 기초(의사 코드 트레이스)

실수형 값은 IEEE 754 배정밀도(binary64)로 나타내며, 덧셈 결과는 가장 가까운 표현 가능한 값으로 반올림한다. 다음 프로그램을 실행한 후의 c의 값은?

real: x ← 0.0
integer: c ← 0
while (x < 1.0)
  x ← x + 0.1
  c ← c + 1
endwhile
  1. A9
  2. B10
  3. C11
정답과 해설 보기

정답: C. 11

0.1은 2진수로는 순환 소수가 되어, 배정밀도에서는 0.1보다 약간 큰 근삿값으로 표현됩니다. 이를 더해 가면 덧셈할 때마다 반올림 오차가 생겨, 10회 더한 결과는 1.0이 아니라 0.9999999999999999가 됩니다. 이 값은 x < 1.0을 만족하므로 11회째의 덧셈이 이루어지고, x가 약 1.1이 되어 반복을 빠져나가므로 c = 11입니다. 실수 반복의 횟수는 정수 변수로 세고, 실수끼리를 =나 ≠로 비교하는 것은 피합니다. 조건을 x ≠ 1.0으로 하면 x가 정확히 1.0이 되지 않으므로 반복이 끝나지 않습니다.

이 분야 연습하기 분야로 돌아가기

프로그래밍의 기초(의사 코드 트레이스)의 다른 문제

  1. 클래스 Counter는 인스턴스마다 정수형 멤버 변수 count(생성 시 0)를 가지며, 메서드 inc()는 자신의 count에 1을 더한다. 다음 프로그램을 실행한 후의 x의 값은?
  2. 클래스 Counter는 인스턴스마다 정수형 멤버 변수 count(생성 시 0)를 가지며, 메서드 inc()는 자신의 count에 1을 더한다. Counter형 변수에는 인스턴스 자체가 아니라 인스턴스에 대한 참조가 들어간다. 다음 프로그램을 실행한 후의 x의 값은?
  3. 다음 프로그램에서 x와 y의 값을 교환할 생각으로 대입문 2개를 작성했다. 실행한 후의 x와 y의 값의 조합은?
  4. 세 변수의 값을 차례로 보내는 다음 프로그램을 실행한 후의 a, b, c의 값의 조합은?
  5. x를 3배 하는 것을 반복하는 다음 프로그램을 실행한 후의 n의 값은?