부동 소수점 산술의 연관성
프로그래밍 영역에서 부동 소수점 숫자는 실수 값을 나타내는 데 일반적으로 사용됩니다. 그러나 이러한 부동 소수점 값에 대한 덧셈과 곱셈의 기본 연산은 항상 예상한 대로 작동하지 않을 수 있습니다.
자주 발생하는 질문은 부동 소수점 덧셈과 곱셈이 결합적인지 여부입니다. 연관성은 피연산자가 추가되거나 곱해지는 순서가 최종 결과에 영향을 미치지 않음을 의미합니다. 곱셈은 실제로 부동 소수점 숫자와 연관되어 있지만 덧셈은 그렇지 않습니다.
이러한 연관성 부족은 다음 코드를 보면 분명해집니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!