> 백엔드 개발 > C++ > 부동 소수점 덧셈이 연관되어 있나요?

부동 소수점 덧셈이 연관되어 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-25 17:16:13
원래의
307명이 탐색했습니다.

Is Floating-Point Addition Associative?

부동 소수점 산술의 연관성

프로그래밍 영역에서 부동 소수점 숫자는 실수 값을 나타내는 데 일반적으로 사용됩니다. 그러나 이러한 부동 소수점 값에 대한 덧셈과 곱셈의 기본 연산은 항상 예상한 대로 작동하지 않을 수 있습니다.

자주 발생하는 질문은 부동 소수점 덧셈과 곱셈이 결합적인지 여부입니다. 연관성은 피연산자가 추가되거나 곱해지는 순서가 최종 결과에 영향을 미치지 않음을 의미합니다. 곱셈은 ​​실제로 부동 소수점 숫자와 연관되어 있지만 덧셈은 그렇지 않습니다.

이러한 연관성 부족은 다음 코드를 보면 분명해집니다.

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1
로그인 후 복사

이 수수께끼 같은 동작은 고유한 부정확성에서 발생합니다. 부동 소수점 숫자. 여러 숫자를 추가할 때 추가가 수행되는 순서에 따라 반올림 오류로 인해 약간 다른 결과가 발생할 수 있습니다.

세미널 논문 "What Every Computer Scientist Should Know about Floating Point Arithmetic"에서는 이 문제에 대해 설명합니다.

"또 다른 회색 영역은 괄호의 해석과 관련이 있습니다. 반올림 오류로 인해 대수의 결합 법칙이 부동 소수점 숫자에 반드시 적용되는 것은 아닙니다. 예를 들어, x = 1e30, y = -1e30 및 z = 1일 때 (x y) z라는 표현식은 x (y z)와 완전히 다른 답을 갖습니다(전자의 경우 1, 후자의 경우 0)."

따라서 부동 소수점 덧셈의 연관성에 의존할 때는 주의해야 합니다. 피연산자가 추가되는 순서에 따라 결과가 미묘하게 변경되어 예상치 못한 동작이 발생할 수 있습니다.

위 내용은 부동 소수점 덧셈이 연관되어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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