컴퓨터 산술

많은 프로그래밍 언어에서 배정밀도의 0.1 + 0.2 == 0.3이라는 비교가 거짓이 되는 이유로 올바른 것은 무엇입니까?

  1. A덧셈 명령이 소수의 덧셈을 올바르게 수행하지 못하는 경우가 있기 때문에
  2. B0.3은 부동소수점수로 나타낼 수 없는 특별한 값이라 비교가 항상 거짓이 되기 때문에
  3. C모두 반올림한 가까운 값으로 표현되어 오차로 인해 값이 미세하게 다르기 때문에
정답과 해설 보기

정답: C. 모두 반올림한 가까운 값으로 표현되어 오차로 인해 값이 미세하게 다르기 때문에

0.1, 0.2, 0.3은 모두 2진수로 정확히 나타낼 수 없어, 각각 가장 가까운 값으로 반올림되어 기록됩니다. 0.1과 0.2의 근삿값을 더해 반올림한 결과는 0.30000000000000004가 되어, 0.3의 근삿값 0.29999999999999998…과 마지막 자리에서 일치하지 않습니다. 그래서 부동소수점수의 비교는 차의 절댓값이 작은 허용값 이하인지로 판정하는 것이 일반적입니다. 덧셈 명령은 규격대로 올바르게 반올림하고 있으며, 0.3도 근삿값으로 나타낼 수 있습니다.

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

컴퓨터 산술의 다른 문제

  1. IEEE 754 단정밀도의 머신 엡실론(1과, 1 다음으로 큰 표현 가능한 수와의 차)은 얼마입니까?
  2. 단정밀도와 배정밀도 부동소수점수에서 신뢰할 수 있는 10진수 유효 자릿수의 기준 조합으로 올바른 것은 무엇입니까?
  3. IEEE 754 비정규화수(서브노멀 수)의 역할로 올바른 것은 무엇입니까?
  4. 비정규화수를 많이 포함하는 계산에서 일부 프로세서는 처리가 크게 느려질 수 있습니다. 그래서 성능을 우선하는 상황에서 사용되는 설정은 무엇입니까?
  5. IEEE 754 부동소수점수 연산에서 양수를 0으로 나눴을 때의 결과로 규격에 정해진 것은 무엇입니까?