C, C++ 및 Java에서는 부동 소수점 숫자를 사용하여 일부 수학 연산을 수행합니다. 이제 부동 소수점 숫자가 결합 규칙을 따르는지 확인하겠습니다.
답은 '아니오'입니다. 어떤 경우에는 부동 소수점 숫자가 연관성 규칙을 따르지 않습니다. 여기에서 몇 가지 예를 살펴보겠습니다.
#include<iostream> using namespace std; main() { float x = -500000000; float y = 500000000; float z = 1; cout << "x + (y + z) is: " << x + (y + z) << endl; cout << "(x + y) + z is "<< (x + y) + z << endl; }
x + (y + z) is: 0 (x + y) + z is 1
여기서 결과가 동일하지 않다는 것을 알 수 있지만 이론적으로는 항상 1이라고 말할 수 있습니다. 이제 질문이 생깁니다. 이 작업은 어떻게 수행됩니까?
첫 번째 경우 x + (y + z), (500000000 + 1)이 실행 중입니다. 그러나 부동 소수점 숫자의 경우 반올림 후 다시 500000000으로 변환됩니다. 이제 -500000000을 추가하면 0이 됩니다. 두 번째 수식에서는 값이 (-500000000 + 500000000) = 0이 되고 1이 더해지므로 최종 결과는 결과는 1입니다.
정수를 사용하면 두 표현식 모두 동일한 결과인 1을 반환합니다.
위 내용은 C, C++ 및 Java의 부동 소수점 산술 및 결합성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!