IEEE floating point
IEEE 754는 전기 전자 기술자 협회(IEEE)에서 개발한 컴퓨터에서 부동소수점를 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한 연산을 정의하고 있다. 가장 최신 버전인 IEEE 754-2008은 IEEE 754-1985와 IEEE 754-1997을 대부분 포함한다.
IEEE 754에는 32 비트 단정도(single-precision), 64 비트 배정도(double-precision), 43 비트 이상의 확장단정도(거의 쓰이지 않음), 79 비트 이상의 확장배정도(일반적으로 80비트로 구현됨)에 대한 형식을 정의하고 있다. 이중 32 비트 단정도는 반드시 구현해야 하며, 다른 형식은 선택사항이다. 많은 프로그래밍 언어에서 IEEE 표준을 따르도록 정의하고 있다. 예를 들어 C에서는 float는 단정도, double은 배정도와 대응된다.
정의
IEEE 754 부동 소수점 표기 표준은 다음과 같이 항목들을 정의한다.
- 산술 형식: 유한한 수들(0을 포함한)과 무한대와 NaN(Not a number)값으로 구성된 2진수와 10진수의 부동 소수점 데이터 집합
- 형식의 교환: 부동 소수점 데이터를 효율적이고 압축적으로 전환할 수도 있는 인코딩
- 반올림 규칙: 산수와 전환의 과정에서 반올림을 할 때의 성질
- 작동: 산수와 산술 형식의 처리 방법 형식
- 예외 처리: 예외적인 조건의 표기 (0으로의 나누는 작업, 오버플로우 등)
IEEE 754에 이 외에도 더 복잡한 예외 처리, 추가적인 작업(삼각함수 등), 표현의 평가, 그리고 생산 가능한 결과의 성취를 위한 여러 방법이 포함되어 있다.
compare floating point
#include <math.h>
int CompareDoubleAbsoulte(double x, double y, double absTolerance = (1.0e-8))
{
double diff = x - y;
if (fabs(diff) <= absTolerance)
return 0;
return (diff > 0) ? 1 : -1;
}