프로그래밍의 기초(의사 코드 트레이스)
실수형 값은 IEEE 754 배정밀도(binary64)로 나타내며, 덧셈 결과는 가장 가까운 표현 가능한 값으로 반올림한다. 다음 프로그램을 실행한 후의 c의 값은?
real: x ← 0.0
integer: c ← 0
while (x < 1.0)
x ← x + 0.1
c ← c + 1
endwhile
- A9
- B10
- 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이 되지 않으므로 반복이 끝나지 않습니다.