>백엔드 개발 >C++ >부동 소수점 덧셈이 연산 순서에 따라 다른 결과를 생성하는 이유는 무엇입니까?

부동 소수점 덧셈이 연산 순서에 따라 다른 결과를 생성하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-29 06:17:15598검색

Why Does Floating-Point Addition Produce Different Results Depending on the Order of Operations?

부동 소수점 연산의 연관성

부동 소수점 연산은 컴퓨팅에서 실수를 나타내는 데 사용됩니다. 내부 반올림 오류로 인해 부동 소수점 연산의 연관성이 의심스러울 수 있습니다.

문제:

세 개의 부동 소수점 숫자를 더하고 비교하는 다음 코드를 고려해보세요. 그 합은 1입니다:

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+y)+z
x+(y+z)

여기서 x = 1e30, y = -1e30, z = 1입니다. 첫 번째 표현식은 1로 평가되고 두 ​​번째 표현식은 0으로 평가됩니다.

위 내용은 부동 소수점 덧셈이 연산 순서에 따라 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.