IEEE 754-1985
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
IEEE 754-1985는 부동 소수점 숫자를 표현하기 위한 기술 표준으로, 부호 비트, 편향된 지수, 가수(fraction)로 구성된다. 이 표준은 단정밀도와 배정밀도 형식을 정의하며, 0, 비정규화 수, NaN(Not a Number), 무한대와 같은 특수한 값들을 표현하는 방법을 제공한다. IEEE 754는 반올림 모드를 정의하고, 기본적인 산술 연산과 비교 연산을 지원하며, copysign, logb, isnan과 같은 추가적인 함수 및 술어를 권장한다. 이 표준은 인텔의 주도로 개발되었으며, 다양한 제조업체에서 구현되어 사실상 표준으로 자리 잡았다.
더 읽어볼만한 페이지
- 부동소수점 - IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. - 부동소수점 - 플롭스
플롭스(FLOPS)는 컴퓨터의 부동 소수점 연산 속도를 나타내는 단위이며, 슈퍼컴퓨터의 성능을 평가하는 지표로 사용된다. - 컴퓨터 산술 - IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. - 컴퓨터 산술 - 1의 보수
1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다. - IEEE 표준 - IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. - IEEE 표준 - IEEE 802.2
IEEE 802.2는 데이터 링크 계층의 LLC 서브레이어를 정의하는 IEEE 802 표준의 일부로, 비연결 및 연결 지향 모드를 지원하며, LLC 클래스 I, II, III, IV를 통해 다양한 서비스 유형을 제공하고, DSAP, SSAP 주소 및 제어 필드로 구성된 헤더와 필요에 따라 SNAP 확장을 사용해 네트워크 통신을 관리한다.
IEEE 754-1985 | |
---|---|
개요 | |
이름 | IEEE 754 |
유형 | IEEE 표준 |
상태 | 대체됨 |
발행일 | 1985년 |
대체 표준 | IEEE 754 |
기술 세부 사항 | |
부동 소수점 산술 표준 | 단정밀도 (대략 7.2자리 십진수 정밀도) 배정밀도 (대략 15.9자리 십진수 정밀도) |
지수 범위 | 단정밀도: -38부터 38까지 배정밀도: -308부터 308까지 |
2. 표현
IEEE 754 형식의 부동소수점 수는 부호 비트, 편향된 지수, 그리고 가수(fraction)의 세 필드로 구성된다.
십진수 0.1562510를 이진수로 표현하면 0.001012가 된다 (즉, 1/8 + 1/32). 과학적 표기법과 유사하게, 이 숫자를 "이진 소수점"의 왼쪽에 1비트가 하나만 있도록 다시 쓰면 다음과 같다.
:
이제 가수와 지수를 읽을 수 있다. 가수는 .012이고 지수는 −3이다.
이 숫자의 IEEE 754 표현의 세 필드는 다음과 같다.
- '''부호''' = 0 (1은 음수를 나타낸다.)
- '''편향된 지수''' = −3 + "편향". '''단정밀도'''에서 편향은 '''127'''이므로, 이 예시에서 편향된 지수는 124이고; '''배정밀도'''에서 편향은 '''1023'''이므로, 이 예시에서 편향된 지수는 1020이다.
- '''가수''' = .01000…2.
IEEE 754는 지수에 편향을 추가하여, 부호가 있는 2의 보수 정수를 비교하는 것과 동일한 하드웨어로 편리하게 숫자를 비교할 수 있게 한다. 편향된 지수를 사용하면, 두 개의 양의 부동소수점 숫자 중 작은 숫자가 부호와 크기 정수와 동일한 순서로 정렬되어 더 큰 숫자보다 "작게" 나타난다. 두 개의 부동소수점 숫자가 서로 다른 부호를 갖는 경우, 부호-크기 비교는 편향된 지수에서도 작동한다. 그러나, 두 편향된 지수 부동소수점 숫자가 모두 음수인 경우, 순서를 반대로 해야 한다.
선두 1비트는 생략되는데, 0을 제외한 모든 숫자가 선두 1로 시작하기 때문이다. 선두 1은 암시적이며 실제로 저장할 필요가 없으므로 "공짜"로 추가 정밀도를 제공한다. 지수 필드는 무한대 또는 계산의 유효하지 않은 결과를 나타내기 위해 모두 1 비트로 채워진다.
2. 1. 수의 표현
IEEE 754 형식의 부동소수점 수는 부호 비트, 편향된 지수, 그리고 가수(fraction)의 세 필드로 구성된다.
십진수 0.1562510를 이진수로 표현하면 0.001012가 된다 (즉, 1/8 + 1/32). 과학적 표기법과 유사하게, 이 숫자를 "이진 소수점"의 왼쪽에 1비트가 하나만 있도록 다시 쓰면 다음과 같다.
:
이제 가수와 지수를 읽을 수 있다. 가수는 .012이고 지수는 −3이다.
이 숫자의 IEEE 754 표현의 세 필드는 다음과 같다.
- '''부호''' = 0 (1은 음수를 나타낸다.)
- '''편향된 지수''' = −3 + "편향". '''단정밀도'''에서 편향은 '''127'''이므로, 이 예시에서 편향된 지수는 124이고; '''배정밀도'''에서 편향은 '''1023'''이므로, 이 예시에서 편향된 지수는 1020이다.
- '''가수''' = .01000…2.
IEEE 754는 지수에 편향을 추가하여, 부호가 있는 2의 보수 정수를 비교하는 것과 동일한 하드웨어로 편리하게 숫자를 비교할 수 있게 한다. 편향된 지수를 사용하면, 두 개의 양의 부동소수점 숫자 중 작은 숫자가 부호와 크기 정수와 동일한 순서로 정렬되어 더 큰 숫자보다 "작게" 나타난다. 두 개의 부동소수점 숫자가 서로 다른 부호를 갖는 경우, 부호-크기 비교는 편향된 지수에서도 작동한다. 그러나, 두 편향된 지수 부동소수점 숫자가 모두 음수인 경우, 순서를 반대로 해야 한다.
선두 1비트는 생략되는데, 0을 제외한 모든 숫자가 선두 1로 시작하기 때문이다. 선두 1은 암시적이며 실제로 저장할 필요가 없으므로 "공짜"로 추가 정밀도를 제공한다.
== 0 ==
0은 특별하게 표현된다.
- '''부호''' = 0은 양의 0을, 1은 음의 0을 나타낸다.
- '''바이어스된 지수''' = 0.
- '''가수''' = 0.
== 비정규화 수 ==
위에 설명된 숫자 표현은 ''정규화된'' 표현이며, 이는 암묵적인 선행 이진 숫자가 1임을 의미한다. 언더플로우가 발생할 때 정밀도 손실을 줄이기 위해, IEEE 754는 암묵적인 선행 숫자를 0으로 만들어 정규화된 표현으로는 불가능한 더 작은 분수를 표현할 수 있는 기능을 포함한다. 이러한 숫자를 비정규화 수라고 한다. 비정규화 수는 정규화된 숫자만큼 많은 유효 숫자를 포함하지 않지만, 연산 결과가 정확히 0은 아니지만 정규화된 숫자로 표현하기에는 0에 너무 가까울 때 점진적인 정밀도 손실을 가능하게 한다.
비정규화 수는 모든 비트가 0인 바이어스된 지수로 표현되며, 이는 단정밀도에서 -126(-127이 아님), 또는 배정밀도에서 -1022(-1023이 아님)의 지수를 나타낸다.[3] 대조적으로, 일반 숫자를 나타내는 가장 작은 바이어스된 지수는 1이다(예시 참조).
2. 1. 1. 0
0은 특별하게 표현된다.- '''부호''' = 0은 양의 0을, 1은 음의 0을 나타낸다.
- '''바이어스된 지수''' = 0.
- '''가수''' = 0.
2. 1. 2. 비정규화 수
위에 설명된 숫자 표현은 ''정규화된'' 표현이며, 이는 암묵적인 선행 이진 숫자가 1임을 의미한다. 언더플로우가 발생할 때 정밀도 손실을 줄이기 위해, IEEE 754는 암묵적인 선행 숫자를 0으로 만들어 정규화된 표현으로는 불가능한 더 작은 분수를 표현할 수 있는 기능을 포함한다. 이러한 숫자를 비정규화 수라고 한다. 비정규화 수는 정규화된 숫자만큼 많은 유효 숫자를 포함하지 않지만, 연산 결과가 정확히 0은 아니지만 정규화된 숫자로 표현하기에는 0에 너무 가까울 때 점진적인 정밀도 손실을 가능하게 한다.비정규화 수는 모든 비트가 0인 바이어스된 지수로 표현되며, 이는 단정밀도에서 -126(-127이 아님), 또는 배정밀도에서 -1022(-1023이 아님)의 지수를 나타낸다.[3] 대조적으로, 일반 숫자를 나타내는 가장 작은 바이어스된 지수는 1이다(예시 참조).
2. 2. NaN (Not a Number)
NaN(Not a Number)은 부동소수점 연산에서 정의되지 않거나 표현할 수 없는 결과를 나타내는 특별한 값이다. 음수의 제곱근을 구하는 것과 같이 유효하지 않은 연산의 결과는 부동소수점 예외로 처리되며, NaN으로 표시된다.IEEE 754-1985에서 NaN은 다음과 같은 형식을 갖는다.
- 부호: 0 또는 1
- 바이어스된 지수: 모든 비트가 1
- 가수: 모든 비트가 0이 아닌 것 (모든 비트가 0이면 무한대를 나타낸다.)
2. 3. 무한대
IEEE 754에서 양의 무한대와 음의 무한대는 다음과 같이 표현된다. 부호는 양의 무한대의 경우 0, 음의 무한대의 경우 1이다. 바이어스된 지수는 모든 비트가 1이고, 가수는 모든 비트가 0으로 표현된다.3. 정밀도
정밀도는 두 개의 연속적인 가수 표현 간의 최소 차이로 정의된다. 따라서 가수의 함수일 뿐이며, 간격은 두 개의 연속적인 숫자 간의 차이로 정의된다.[4]
==== 단정밀도 (Single Precision) ====
단정밀도 숫자는 32비트를 사용한다. 0에 가장 가까운 양수 및 음수는 ±2-23 × 2-126 ≈ ±1.40130e-45이고, 0에 가장 가까운 정규화된 양수 및 음수는 ±1 × 2-126 ≈ ±1.17549e-38이다. 0에서 가장 멀리 떨어진 유한 양수 및 유한 음수는 ±(2−2−23) × 2127[5] ≈ ±3.40282e38이다.
단정밀도에서 주어진 지수에 대한 몇 가지 예시 범위 및 간격 값은 다음과 같다.
실제 지수 (바이어스 없음) | Exp (바이어스) | 최소값 | 최대값 | 간격 |
---|---|---|---|---|
−1 | 126 | 0.5 | ≈ 0.999999940395 | ≈ 5.96046e-8 |
0 | 127 | 1 | ≈ 1.999999880791 | ≈ 1.19209e-7 |
1 | 128 | 2 | ≈ 3.999999761581 | ≈ 2.38419e-7 |
2 | 129 | 4 | ≈ 7.999999523163 | ≈ 4.76837e-7 |
10 | 137 | 1024 | ≈ 2047.999877930 | ≈ 1.22070e-4 |
11 | 138 | 2048 | ≈ 4095.999755859 | ≈ 2.44141e-4 |
23 | 150 | 8388608 | 16777215 | 1 |
24 | 151 | 16777216 | 33554430 | 2 |
127 | 254 | ≈ 1.70141e38 | ≈ 3.40282e38 | ≈ 2.02824e31 |
예를 들어, 16,777,217은 32비트 부동 소수점으로 인코딩될 수 없으며 16,777,216으로 반올림된다. 그러나 2의 거듭제곱인 표현 가능한 범위 내의 모든 정수는 반올림 없이 32비트 부동 소수점에 저장할 수 있다.
==== 배정밀도 (Double Precision) ====
배정밀도 숫자는 64비트를 차지한다. 배정밀도에서 0에 가장 가까운 양수와 음수는 ±2-52 × 2-1022 ≈ ±4.94066×10-324 이고,[5] 0에 가장 가까운 정규화된 양수와 음수는 ±1 × 2-1022 ≈ ±2.22507×10-308 이다.[5] 0에서 가장 멀리 떨어진 유한 양수와 유한 음수는 ±(2−2−52) × 21023 ≈ ±1.79769×10308이다.[5]
배정밀도에서 주어진 지수에 대한 몇 가지 예시 범위 및 간격 값은 다음과 같다:
실제 지수 (바이어스 없음) | Exp (바이어스) | 최소값 | 최대값 | 간격 |
---|---|---|---|---|
−1 | 1022 | 0.5 | ≈ 0.999999999999999888978 | ≈ 1.11022e-16 |
0 | 1023 | 1 | ≈ 1.999999999999999777955 | ≈ 2.22045e-16 |
1 | 1024 | 2 | ≈ 3.999999999999999555911 | ≈ 4.44089e-16 |
2 | 1025 | 4 | ≈ 7.999999999999999111822 | ≈ 8.88178e-16 |
10 | 1033 | 1024 | ≈ 2047.999999999999772626 | ≈ 2.27374e-13 |
11 | 1034 | 2048 | ≈ 4095.999999999999545253 | ≈ 4.54747e-13 |
52 | 1075 | 4503599627370496 | 9007199254740991 | 1 |
53 | 1076 | 9007199254740992 | 18014398509481982 | 2 |
1023 | 2046 | ≈ 8.98847e307 | ≈ 1.79769e308 | ≈ 1.99584e292 |
==== 확장 형식 (Extended Formats) ====
확장 형식은 최종 결과에 필요한 것보다 더 높은 정밀도로 내부 계산을 수행하여 반올림 오류를 최소화하기 위해 사용된다. 표준은 이러한 형식에 대한 최소 정밀도 및 지수 요구 사항만 지정한다. x87 80비트 확장 형식은 이러한 요구 사항을 충족하는 가장 일반적으로 구현되는 확장 형식이다.
3. 1. 단정밀도 (Single Precision)
단정밀도 숫자는 32비트를 사용한다. 0에 가장 가까운 양수 및 음수는 ±2-23 × 2-126 ≈ ±1.40130e-45이고, 0에 가장 가까운 정규화된 양수 및 음수는 ±1 × 2-126 ≈ ±1.17549e-38이다. 0에서 가장 멀리 떨어진 유한 양수 및 유한 음수는 ±(2−2−23) × 2127[5] ≈ ±3.40282e38이다.단정밀도에서 주어진 지수에 대한 몇 가지 예시 범위 및 간격 값은 다음과 같다.
실제 지수 (바이어스 없음) | Exp (바이어스) | 최소값 | 최대값 | 간격 |
---|---|---|---|---|
−1 | 126 | 0.5 | ≈ 0.999999940395 | ≈ 5.96046e-8 |
0 | 127 | 1 | ≈ 1.999999880791 | ≈ 1.19209e-7 |
1 | 128 | 2 | ≈ 3.999999761581 | ≈ 2.38419e-7 |
2 | 129 | 4 | ≈ 7.999999523163 | ≈ 4.76837e-7 |
10 | 137 | 1024 | ≈ 2047.999877930 | ≈ 1.22070e-4 |
11 | 138 | 2048 | ≈ 4095.999755859 | ≈ 2.44141e-4 |
23 | 150 | 8388608 | 16777215 | 1 |
24 | 151 | 16777216 | 33554430 | 2 |
127 | 254 | ≈ 1.70141e38 | ≈ 3.40282e38 | ≈ 2.02824e31 |
예를 들어, 16,777,217은 32비트 부동 소수점으로 인코딩될 수 없으며 16,777,216으로 반올림된다. 그러나 2의 거듭제곱인 표현 가능한 범위 내의 모든 정수는 반올림 없이 32비트 부동 소수점에 저장할 수 있다.
3. 2. 배정밀도 (Double Precision)
배정밀도 숫자는 64비트를 차지한다. 배정밀도에서 0에 가장 가까운 양수와 음수는 ±2-52 × 2-1022 ≈ ±4.94066×10-324 이고,[5] 0에 가장 가까운 정규화된 양수와 음수는 ±1 × 2-1022 ≈ ±2.22507×10-308 이다.[5] 0에서 가장 멀리 떨어진 유한 양수와 유한 음수는 ±(2−2−52) × 21023 ≈ ±1.79769×10308이다.[5]배정밀도에서 주어진 지수에 대한 몇 가지 예시 범위 및 간격 값은 다음과 같다:
실제 지수 (바이어스 없음) | Exp (바이어스) | 최소값 | 최대값 | 간격 |
---|---|---|---|---|
−1 | 1022 | 0.5 | ≈ 0.999999999999999888978 | ≈ 1.11022e-16 |
0 | 1023 | 1 | ≈ 1.999999999999999777955 | ≈ 2.22045e-16 |
1 | 1024 | 2 | ≈ 3.999999999999999555911 | ≈ 4.44089e-16 |
2 | 1025 | 4 | ≈ 7.999999999999999111822 | ≈ 8.88178e-16 |
10 | 1033 | 1024 | ≈ 2047.999999999999772626 | ≈ 2.27374e-13 |
11 | 1034 | 2048 | ≈ 4095.999999999999545253 | ≈ 4.54747e-13 |
52 | 1075 | 4503599627370496 | 9007199254740991 | 1 |
53 | 1076 | 9007199254740992 | 18014398509481982 | 2 |
1023 | 2046 | ≈ 8.98847e307 | ≈ 1.79769e308 | ≈ 1.99584e292 |
3. 3. 확장 형식 (Extended Formats)
확장 형식은 최종 결과에 필요한 것보다 더 높은 정밀도로 내부 계산을 수행하여 반올림 오류를 최소화하기 위해 사용된다. 표준은 이러한 형식에 대한 최소 정밀도 및 지수 요구 사항만 지정한다. x87 80비트 확장 형식은 이러한 요구 사항을 충족하는 가장 일반적으로 구현되는 확장 형식이다.4. 예시
wikitable
유형 | 부호 | 실제 지수 | 지수(바이어스) | 지수 필드 | 가수 필드 | 값 |
---|---|---|---|---|---|---|
0 | 0 | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | 0.0 |
음수 영 | 1 | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0000 | −0.0 |
1 | 0 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | 1.0 |
-1 | 1 | 0 | 127 | 0111 1111 | 000 0000 0000 0000 0000 0000 | −1.0 |
가장 작은 비정규화된 수 | * | −126 | 0 | 0000 0000 | 000 0000 0000 0000 0000 0001 | ±2−23 × 2−126 = ±2−149 |
"중간" 비정규화된 수 | * | −126 | 0 | 0000 0000 | 100 0000 0000 0000 0000 0000 | ±2−1 × 2−126 = ±2−127 |
가장 큰 비정규화된 수 | * | −126 | 0 | 0000 0000 | 111 1111 1111 1111 1111 1111 | ±(1−2−23) × 2−126 |
가장 작은 정규화된 수 | * | −126 | 1 | 0000 0001 | 000 0000 0000 0000 0000 0000 | ±2−126 |
가장 큰 정규화된 수 | * | 127 | 254 | 1111 1110 | 111 1111 1111 1111 1111 1111 | ±(2−2−23) × 2127 |
양의 무한대 | 0 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | +∞ |
음의 무한대 | 1 | 128 | 255 | 1111 1111 | 000 0000 0000 0000 0000 0000 | −∞ |
숫자가 아님 | * | 128 | 255 | 1111 1111 | 0이 아님 | NaN |
* 부호 비트는 0 또는 1일 수 있습니다. |
다음은 단정밀도 IEEE 754 표현의 몇 가지 예시이다.
5. 부동소수점 수 비교
부동소수점 계산에 내재된 반올림 오류는 결과의 정확한 같음을 확인하기 위한 비교 사용을 제한할 수 있다.[6] 허용 가능한 범위를 선택하는 것은 복잡한 주제이다. 일반적인 기술은 근사 비교를 수행하기 위해 비교 엡실론 값을 사용하는 것이다.[6] 비교의 관대함에 따라 일반적인 값은 단정밀도의 경우 `1e-6` 또는 `1e-5`이고 배정밀도의 경우 `1e-14`이다.[7][8] 또 다른 일반적인 기술은 ULP(최소 유효 자릿수)인데, 마지막 자릿수의 차이를 확인하여 두 값이 얼마나 떨어져 있는지 효과적으로 확인한다.[9]
음수 0과 양수 0은 일반적으로 비교 목적으로 동일하게 간주되지만, 일부 프로그래밍 언어 관계 연산자 및 유사한 구문은 이를 구별한다. 자바 언어 사양에 따르면,[10] 비교 및 동등 연산자는 이를 동일하게 처리하지만 `Math.min()` 및 `Math.max()`는 이를 구별하며(공식적으로 Java 버전 1.1부터 시작하여 실제로 1.1.1부터), `Float` 및 `Double` 클래스의 `equals()`, `compareTo()` 및 심지어 `compare()` 비교 메서드도 마찬가지이다.
모든 가능한 비트 조합은 확장된 실수 체계와 관련된 순서를 가진 고유한 값을 갖는 NaN이거나 숫자이며, 음수 0과 양수 0의 두 가지 비트 조합을 제외하고는 특별한 주의가 필요하다. 이진 표현은 NaN을 제외하고 두 숫자를 부호와 크기 정수(바이트 순서 문제 적용)로 비교할 수 있다는 특수한 속성을 가지고 있다. 2의 보수 정수로 비교할 때: 부호 비트가 다르면 음수가 양수보다 앞에 오므로 2의 보수는 올바른 결과를 제공한다(단, 음수 0과 양수 0은 같다고 간주해야 한다). 두 값 모두 양수이면 2의 보수 비교도 올바른 결과를 제공한다. 그렇지 않으면(두 개의 음수), 올바른 FP 순서는 2의 보수 순서와 반대이다.
6. 반올림
IEEE 표준은 네 가지의 서로 다른 반올림 모드를 가지고 있다. 첫 번째는 기본값이며, 나머지는 '방향 반올림'이라고 불린다.
- 가장 가까운 수로 반올림 - 가장 가까운 값으로 반올림한다. 숫자가 중간 지점에 있는 경우, 가장 가까운 값으로 반올림하며 짝수(0)의 최하위 비트를 가진다. 즉, 50%의 확률로 반올림된다. (IEEE 754-2008에서는 이 모드를 다른 가장 가까운 수로 반올림 모드와 구별하기 위해 ''roundTiesToEven''이라고 부른다).
- 0 방향으로 반올림 - 0을 향한 방향 반올림
- +∞ 방향으로 반올림 - 양의 무한대를 향한 방향 반올림
- −∞ 방향으로 반올림 - 음의 무한대를 향한 방향 반올림.
7. 확장된 실수 체계
IEEE 표준은 별도의 양의 무한대와 음의 무한대를 가진 확대된 실수 체계를 사용한다. 초안 작성 과정에서 프로그래머에게 모드 선택 옵션을 제공하여 단일 부호 없는 무한대를 갖는 사영 기저 실수 체계를 표준에 통합하자는 제안이 있었으나, 최종 표준의 복잡성을 줄이기 위해 사영 모드는 삭제되었다. 인텔 8087 및 인텔 80287 부동 소수점 보조 프로세서는 둘 다 이 사영 모드를 지원한다.
8. 함수 및 술어
8. 1. 표준 연산
덧셈, 뺄셈, 곱셈, 나눗셈, 제곱근 연산을 제공해야 한다. 부동 소수점 나머지 연산은 일반적인 모듈로 연산과 다르며, 두 개의 양수에서 음수가 될 수 있다. `x-(round(x/y)·y)`의 정확한 값을 반환한다. 또한, 가장 가까운 정수로 반올림하는 연산을 제공해야 하는데, 두 정수의 중간 지점에서 방향이 없는 반올림의 경우 짝수 정수를 선택한다.비교 연산도 제공해야 한다. IEEE 754는 −∞ = −∞, +∞ = +∞ 및 모든 x (NaN 포함)에 대해 x ≠ NaN을 정의한다.
8. 2. 권장 함수 및 술어
IEEE 754-1985는 여러 권장 함수 및 술어를 정의한다.[14]- `copysign(x,y)`는 x의 절대값을 유지하고, y의 부호를 x에 적용하여 반환한다. `abs(x)`는 `copysign(x,1.0)`과 동일하다. `copysign`은 NaN에도 적용되는 몇 안 되는 연산 중 하나이며, C99 표준에 포함되었다.
- −x는 x의 부호를 반전시킨다. 이는 x가 0일 경우, 0−x와 다르게 동작한다. −(0)은 −0이지만, 0−0은 반올림 모드에 따라 결과가 달라진다.
- `scalb(y, N)`
- `logb(x)`
- `finite(x)`는 x가 −Inf와 Inf 사이의 유한한 값인지를 판별하는 술어이다.
- `isnan(x)`는 x가 NaN인지 판별하는 술어로, "x ≠ x"와 동일하게 동작한다.
- `x <> y`는 `NOT(x = y)`와는 NaN 처리 방식이 다르다.[14]
- `unordered(x, y)`는 x 또는 y가 NaN이어서 순서를 비교할 수 없을 때 참을 반환한다.
- `class(x)`
- `nextafter(x,y)`는 x에서 y 방향으로 가장 가까운 표현 가능한 값을 반환한다.
9. 역사
1976년, 인텔은 부동 소수점 보조 프로세서 개발을 시작했다. 인텔은 다양한 수학 소프트웨어 라이브러리에서 발견되는 모든 연산의 훌륭한 구현을 포함하는 칩을 판매하고자 했다.
프로젝트를 관리한 존 팔머는 이 노력이 서로 다른 프로세서에서 부동 소수점 연산을 통합하는 표준에 의해 뒷받침되어야 한다고 믿고 캘리포니아 대학교의 윌리엄 카한에게 연락했다. 카한은 이전에 휴렛 팩커드 계산기의 정확성 개선에 기여한 인물이었다. 카한은 인텔이 디지털 이큅먼트 코퍼레이션(DEC)의 VAX 부동 소수점을 사용할 것을 제안했지만, 인텔은 더 넓은 시장을 목표로 했기에 카한에게 사양 작성을 요청했다.
인텔의 이러한 움직임은 다른 공급업체들을 걱정하게 했고, "공정한 경쟁의 장"을 마련하기 위한 표준화 노력이 시작되었다. 카한은 1977년 11월에 열린 제2차 IEEE 754 표준 워킹 그룹 회의에 참석하여 인텔의 초안 제안서를 제출할 권한을 받았다. 이 초안은 제롬 코넨, 해럴드 스톤과 공동으로 작성되었으며, "카한-코넨-스톤 제안" 또는 "K-C-S 형식"으로 알려졌다.
카한의 제안은 60비트 부동 소수점 형식과 같이 11비트 지수를 사용했고, 무한대, NaN(비정규화 수) 및 더 나은 균형의 지수 바이어스를 제공했다.
초안 표준은 승인 전에도 여러 제조업체에서 구현되었다.[16][17] 1980년에 발표된 인텔 8087은 초안 표준을 구현한 최초의 칩이었다.
디지털 이큅먼트 코퍼레이션(DEC)는 비정규화 수에 대해 성능 문제와 자사 형식으로 표준화하는 것이 경쟁 우위를 제공할 것이라는 이유로 반대했다. 하지만 점진적 언더플로우에 대한 논쟁은 1981년 DEC에서 고용한 전문가가 반대 의견을 내면서 끝났다. DEC는 점진적 언더플로우가 잘못된 아이디어임을 증명하려 했지만, 연구 결과는 정반대였고 결국 굴복했다. 1985년에 표준이 비준되었지만, 이미 1년 전에 여러 제조업체에서 구현되면서 사실상 표준이 되었다.[5]
참조
[1]
논문
IEEE Standard for Binary Floating-Point Arithmetic
[2]
웹사이트
ANSI/IEEE Std 754-2019
http://754r.ucbtest.[...]
2019-08-06
[3]
서적
Computer Organization and Design
https://archive.org/[...]
Morgan Kaufmann
[4]
웹사이트
Computer Arithmetic
https://web.archive.[...]
2011-01-02
[5]
웹사이트
Lecture Notes on the Status of IEEE 754
http://www.cs.berkel[...]
University of California, Berkeley
2007-04-12
[6]
웹사이트
Godot math_funcs.h
https://github.com/g[...]
2022-07-30
[7]
웹사이트
Godot math_defs.h
https://github.com/g[...]
2022-07-30
[8]
웹사이트
Godot MathfEx.cs
https://github.com/g[...]
[9]
웹사이트
Comparing Floating Point Numbers, 2012 Edition
https://randomascii.[...]
2012-02-26
[10]
웹사이트
Java Language and Virtual Machine Specifications
http://java.sun.com/[...]
[11]
논문
Handling Floating-Point Exceptions in Numeric Programs
http://www.jhauser.u[...]
1996-03-01
[12]
논문
IEEE Task P754: A proposed standard for binary floating-point arithmetic
1981-03-01
[13]
논문
On a proposed floating-point standard
[14]
서적
ISO/IEC 9899:1999 - Programming languages - C
Iso.org
[15]
문서
W. Kahan 2003, pers. comm. to Mike Cowlishaw and others after an IEEE 754 meeting
[16]
웹사이트
An Interview with the Old Man of Floating-Point
http://www.eecs.berk[...]
1998-02-20
[17]
웹사이트
History of IEEE Floating-Point Format
https://web.archive.[...]
Connexions
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com