일반적인 부동 소수점 구현에서 단일 연산의 결과는 마치 연산이 무한정 정밀하게 수행 된 것처럼 생성 된 다음 가장 가까운 부동 소수점 수로 반올림됩니다.
비교 +의 B를 하고 , B + : 무한의 정밀도로 수행 각 연산의 결과는 동일하므로이 무한 정밀 결과는 동일한 방식으로 반올림 동일하다. 즉, 부동 소수점 추가는 정식입니다.a+bb+a
테이크 : B는 부동 소수점 숫자입니다. 함께 이진 부동 소수점 수, (2) B는 이렇게 부동 소수점 수 (지수가 하나 더 크다), 또한 B + B는 반올림 오차없이 추가된다. 그런 다음 a 는 정확한 값 b + b에 추가됩니다 . 결과는 가장 가까운 부동 소수점 수로 반올림 된 정확한 값 2 b + a 입니다.b+b+ab2bb+bab+b2b+a
가지고 + B + B : + B 것은 추가되고, 반올림 오류가있을 것 R 우리는 결과를 얻을 수 있도록, + B + R을 . 추가 B를 , 그 결과는이다 정확한 값 이 B + + R은 가장 가까운 부동 소수점 수로 반올림.a+b+ba+bra+b+rb2b+a+r
하나의 경우, 는 반올림됩니다. 다른 경우에, 2 (B) + + R , 반올림.2b+a2b+a+r
추신. 두 개의 특정 숫자 와 b에 대해 두 계산 모두 동일한 결과를 제공 하는지 여부 는 숫자와 계산 a + b 의 반올림 오차에 따라 달라지며 일반적으로 예측하기 어렵습니다. 단정도 또는 배정도를 사용하면 원칙적으로 문제와 차이가 없지만 반올림 오차가 다르기 때문에 단 정밀도에서 결과가 같고 배정도에서는 같지 않으며 그 반대의 경우 a와 b의 값이 있습니다. 정밀도는 훨씬 높아지지만 두 표현식이 수학적으로 동일하지만 부동 소수점 산술에서 동일하지 않다는 문제는 동일하게 유지됩니다.aba+b
PPS. 일부 언어에서는 부동 소수점 산술이 실제 명령문에서 제공하는 것보다 높은 정밀도 또는 더 높은 수의 범위로 수행 될 수 있습니다. 이 경우 두 합계가 동일한 결과를 제공 할 가능성이 훨씬 높습니다 (그러나 여전히 보장되지는 않음).
PPPS. 한 의견은 부동 소수점 숫자가 같은지 물어볼 것인지 물었다. 당신이하고있는 일을 알고 있다면 절대적으로. 예를 들어, 배열을 정렬하거나 집합을 구현하는 경우 "대략 같은"개념을 사용하려는 경우 심각한 문제에 봉착하게됩니다. 그래픽 사용자 인터페이스에서 객체의 크기가 변경된 경우 객체 크기를 다시 계산해야 할 수도 있습니다. oldSize == newSize를 비교하여 재 계산을 피하고 실제로는 거의 동일한 크기를 가지고 있지 않으며 프로그램이 올바른지 알고 불필요한 재 계산이 있더라도.