> 백엔드 개발 > C++ > 부동소수점 산술에서 0.1이 0.1과 같지 않은 이유는 무엇입니까?

부동소수점 산술에서 0.1이 0.1과 같지 않은 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-15 08:49:46
원래의
918명이 탐색했습니다.

Why Doesn't 0.1 Equal 0.1 in Floating-Point Arithmetic?

부동 소수점 숫자: 0.1과 컴퓨터 표현 간의 불일치 이해

부동 소수점 산술은 컴퓨터 과학의 기본이지만 0.1과 같은 숫자가 저장되는 방식은 직관에 어긋날 수 있습니다. 이 설명은 표현 과정을 명확하게 합니다.

IEEE 754 표준에서는 부동 소수점 숫자가 부호 비트, 지수 및 가수로 구성된다고 규정합니다. 0.1의 이진 표현을 살펴보겠습니다.

<code>0 | 01111011 | 10011001100110011001101</code>
로그인 후 복사

내역은 다음과 같습니다.

  • 부호: 0(긍정)
  • 지수(편향): 123(123 - 127 편향 = -4)
  • 가수: 1.0011001100110011001101(1과 분수 구성요소)

지수는 2-4의 곱셈을 의미합니다. 가수는 분수 부분을 나타냅니다. 이러한 구성 요소를 추가하면 약 1.60000002384185791015625가 생성됩니다. 2-4를 곱하면 0.100000001490116119384765625가 되며, 이는 0.1에 가까운 근사값입니다.

십진수 표현도 비슷한 패턴을 따릅니다. 예를 들어 0.8125는 다음과 같이 저장됩니다.

<code>0 | 01111110 | 10100000000000000000000</code>
로그인 후 복사
  • 부호: 0(긍정)
  • 지수(편향): 126(126 - 127 편향 = -1)
  • 가수: 1.101(정수 및 소수부)

지수는 2-1의 곱셈을 나타냅니다. 가수 1.101은 13/8과 같습니다. 따라서 13/8 * 1/2 = 0.8125입니다.

이 상세한 표현은 0.1과 같이 단순해 보이는 소수가 부동 소수점 숫자와 약간 다른 이유를 강조합니다. 이러한 약간의 부정확성은 시스템에 내재되어 있으며 컴퓨터 시스템 내의 수치 계산을 이해하는 데 중요합니다. 이 방법은 계산의 정확성과 효율성을 보장합니다.

위 내용은 부동소수점 산술에서 0.1이 0.1과 같지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿