10진수 32 부동소수점 형식
decimal32 floating-point format| 부동 소수점 포맷 |
|---|
| IEEE 754 |
| 다른. |
컴퓨팅에서 decimal32는 컴퓨터 메모리에서 4바이트(32비트)를 차지하는 10진수 부동소수점 컴퓨터 번호부여 형식입니다.이는 재무 및 세금 계산과 같이 소수점 반올림을 정확하게 에뮬레이트해야 하는 애플리케이션을 위한 것입니다.binary16 형식과 마찬가지로 메모리 절약을 목적으로 합니다.
Decimal32는 소수점 이하 7자리 유효값과 -95 ~ +96의 지수 범위, 즉 ±0.0000001 ~ ±9.999999 × 10−101를 지원합니다(등가: ±00001 ~ ±99999 × 10^).90유의와 은 정규화되지 않기 때문에(암묵적으로 선행하는 "1"은 없음), 유효 자릿수가 7자리 미만인 대부분의 값은 1 × 102=0.1 × 103=0.01 × 104 등 여러 개의 가능한 표현을 갖는다.제로에는 192개의 가능한 표현이 있습니다(서명된 제로가 모두 포함되어 있는 경우 384).
Decimal32 부동소수점 형식은 비교적 새로운 10진수 부동소수점 형식으로 2008년판[1] IEEE 754 및 ISO/IEC/IEE 60559:[2]2011에서 정식으로 도입되었습니다.
decimal32 값의 표현
| 서명하다 | 조합 | Trailing significant 및 필드 |
|---|---|---|
| 1비트 | 11비트 | 20비트 |
s | ggggggggggg | tttttttttttttttttttt |
IEEE 754 에서는, decimal32 값의 2개의 대체 표현 방법이 가능합니다.표준에서는 예를 들어 시스템 간에 decimal32 값이 통신되는 상황에서 사용되는 표현을 나타내는 방법을 규정하지 않습니다.
하나의 표현방법에서 2진수 정수 10진수(BID)에 기초하여 유의와 를 2진수 부호화 정의 정수로 나타낸다.
또 다른 표현 방법은 대부분의 유의 및 (가장 유의한 숫자를 제외한) 촘촘히 채워진 10진수(DPD)에 기초한다.
두 가지 대안 모두 정확히 동일한 범위의 대표 가능한 숫자를 제공합니다. 7자리 유효값과 3 × 26 = 192의 가능한 지수 값입니다.
양쪽 인코딩에서 최상위 2비트와 최상위 4비트의 BID와 DPD는 5비트로 결합됩니다.콤비네이션필드에서 5비트의 위치는 다양하지만 그 외에는 부호화가 동일합니다.지수의 2개의 MSB는 0 ~ 2(3개의 가능한 값)의 값만 인코딩하고 의 4개의 MSB는 0 ~ 9의 소수점(10개의 가능한 값)을 나타내므로 6이 아닌 5비트로 충분합니다.총계로는3*10 = 1개의 인코딩으로 조합했을 때 30개의 가능한 값( 32 \} =) 。
| 조합 필드 | MSB의 수 | 의 LSB 지수 | 묘사 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| g10 | g9 | g8 | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 | 지수 | 의미심장하다 | |||
| 0 | 0 | d | e | f | g | h | i | a | b | c | 00 | 0도 | 디프지 | 유한수 전체 이진 의미 및 = 0abctttttttttttttttttttttt | |
| 0 | 1 | 01 | |||||||||||||
| 1 | 0 | 10 | |||||||||||||
| 1 | 1 | 0 | 0 | d | e | f | g | h | i | c | 00 | 100c | 유한수 전체 이진 의미 및 = 100 ctttttttttttttttttttttt | ||
| 1 | 1 | 0 | 1 | 01 | |||||||||||
| 1 | 1 | 1 | 0 | 10 | |||||||||||
| 1 | 1 | 1 | 1 | 0 | ± 무한도 | ||||||||||
| 1 | 1 | 1 | 1 | 1 | NaN(payload in significantand) | ||||||||||
| 조합 필드 | MSB의 수 | 의 LSB 지수 | Significant's Leading 십진수 | 묘사 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| g10 | g9 | g8 | g7 | g6 | g5 | g4 | g3 | g2 | g1 | g0 | 지수 | 의미심장하다 | ||||
| 0 | 0 | a | b | c | d | e | f | g | h | i | 00 | 0도 | 디프지 | 4*a + 2*b + c | 한정된 수: | |
| 0 | 1 | 01 | ||||||||||||||
| 1 | 0 | 10 | ||||||||||||||
| 1 | 1 | 0 | 0 | c | 00 | 100c | 8 + c | 한정된 수: | ||||||||
| 1 | 1 | 0 | 1 | 01 | ||||||||||||
| 1 | 1 | 1 | 0 | 10 | ||||||||||||
| 1 | 1 | 1 | 1 | 0 | ± 무한도 | |||||||||||
| 1 | 1 | 1 | 1 | 1 | NaN(payload in significantand) | |||||||||||
BID 인코딩의 경우 위의 BID 표에 나타나 있듯이 전체 이진 의미 및 값은 후행 의미 필드의 비트를 의미 및 MSB에 추가하여 얻습니다.결과적으로 significant and는 24비트의 양의 이진수 정수이며, 개별 소수 자릿수를 얻으려면 10으로 반복적으로 나누어야 합니다.
DPD 인코딩의 경우 위의 DPD 표는 significantand의 MSB에서 significantand의 선행 10진수를 얻는 방법을 보여줍니다.후행의 유효 자릿수와 10 진수를 취득하려면 , DPD 룰에 따라서 유효한 후행 필드를 디코딩 할 필요가 있습니다(아래를 참조).완전한 10진수 유의는 선행 및 후행 10진수를 연결하여 얻을 수 있습니다.
±Infinity의 경우 부호 비트 외에 나머지 비트는 모두 무시됩니다(즉, 지수 및 significant 필드 모두 효과가 없습니다.NaN의 경우 부호 비트는 표준에서 의미가 없으며 무시됩니다.따라서 서명된 NaN과 서명되지 않은 NaN은 동일하지만 일부 프로그램에서는 서명된 NaN으로 표시됩니다.비트 g5는 NaN이 무음(0)인지 시그널링(1)인지를 판별합니다.의 비트는 NaN의 페이로드이며 사용자 정의 데이터를 유지할 수 있습니다(예를 들어 NaN이 생성된 방법을 구별하기 위해).통상적인 중요도와 마찬가지로 NaN의 payload는 BID 부호화 또는 DPD 부호화 중 하나입니다.
이진 정수 유의 필드
이 형식은 0 ~ 107 - 1의 이진수를 사용하며 = 9999999 = 98967F16 = 1001100010010110011111입니다2.인코딩은 최대 10 × 220 - 1 = 10485759 = 9FFFF16 = 1001111111111111111111까지2 이진수를 나타낼 수 있지만, 10-1보다7 큰 값은 불법입니다(입력 시 0으로 처리하려면 표준 구현이 필요합니다).
위에서 설명한 바와 같이 부호화는 의 최상위4비트가 0 ~7(00002 ~01112) 또는 그 이상(1000 또는 10012)인지2 여부에 따라 달라집니다.
부호 비트 뒤의 2비트가 "00", "01" 또는 "10"인 경우, 지수 필드는 부호 비트 뒤의 8비트로 구성되며, significant는 암묵적인 선행 0비트로 나머지 23비트가 됩니다.
s 00eeee (0)ttttttttttts 01eee (0)ttttttttttttttttttttttttttttttttttttttttt 10eeeeee (0)ttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
여기에는 선행 유효 자릿수가 0인 정규 이하의 숫자가 포함됩니다.
부호 비트 뒤의 2비트가 "11"인 경우, 8비트 지수 필드는 오른쪽으로 2비트 이동하며(그 후 부호 비트와 "11" 비트 모두 뒤), 표시된 유의는 나머지 21비트에 있습니다.이 경우 true signand에는 암묵적인(즉, 저장되지 않은) 선두의 3비트 시퀀스 "100"이 있습니다.
s 1100eeee (100) tttttttttt s 1101eeeee (100) ttttttttttttttt 1110eeeee (100) tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
부호 비트 뒤에 오는 "11" 2비트 시퀀스는 의미자에 대한 암묵적인 "100" 3비트 프리픽스가 있음을 나타냅니다.바이너리 포맷의 정상값과 유의값 사이에 암묵적인 1이 있는 것을 비교합니다."00", "01" 또는 "10" 비트는 지수 필드의 일부입니다.
significant 및 필드의 선두 비트는 최상위 10진수를 인코딩하지 않습니다.그것은 단순히 큰 순수 2진수의 일부일 뿐입니다.예를 들어, 8000000의 significant는 binary 011110100100000000000으로 인코딩되고 선두 4비트는 7로23 인코딩됩니다.첫 번째 significant는 2 = 8388608입니다.
위의 경우 표시되는 값은 다음과 같습니다.
- (-1)sign × 10exponent−101 × 유의
부호 비트 뒤의 4비트가 "1111"인 경우 위에서 설명한 바와 같이 값은 무한대 또는 NaN입니다.
s 11110 xx...x ±139s 11111 0x...x 조용한 NaN s 11111 1x...x 시그널링 NaN
촘촘하게 채워진 10진수 유의 및 필드
이 버전에서는 significant 및 는 일련의 10진수로 저장됩니다.선두 자리수는 0 ~9(3 또는4 바이너리비트)이며, 나머지 자리수는 Density Packed 10진수(DPD) 부호화를 사용합니다.
지수의 선두 2비트와 의 선두 자리(3 또는 4비트)가 부호 비트에 이은 5비트로 결합됩니다.
그 후의 이 6비트는 지수 연속 필드이며, 지수의 중요도가 낮은 비트를 제공합니다.
마지막 20비트는 2개의 10비트 데클레트로 [3]구성된 유의 및 연속 필드입니다.각 디클레트는 DPD 부호화를 사용하여 10진수[3] 3자리를 부호화합니다.
부호 비트 뒤의 처음 2비트가 "00", "01" 또는 "10"인 경우, 이러한 비트는 지수의 선두 비트이며, 그 뒤의 3비트는 선두 10진수(0 ~ 7)로 해석됩니다.
s 00 TTT (00) eee (0TT) [ tttttt] [ ttttttt]의 01 TTT (01) eee (0TT) [ tttttt]의 10 TTT (10) eeee (0TTTT)
부호 비트 뒤의 처음 2비트가 "11"인 경우, 두 번째 2비트는 지수의 선두 비트이고 마지막 비트에는 "100"이 접두되어 선두 10진수(8 또는 9)를 형성합니다.
s 1100 T (00) eee (100T) [ ttttttt][ ttttttt] s 1101 T (01) eee (100T) [ tttttttt] s 1110 T (10) eee (100T) [ttttttttttttt]
5비트 필드의 나머지 두 가지 조합(11110 및 11111)은 각각 ±infinity 및 NaN을 나타내기 위해 사용됩니다.
declet의 DPD/3BCD 트랜스코딩은 다음 표에 나와 있습니다.b9...b0은 DPD의 비트이고 d2...d0은 BCD의 3자리 숫자입니다.
| DPD 부호화 값 | 십진수 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 코드 공간(1024개 상태) | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | d2 | d1 | d0 | 부호화된 값 | 묘사 | 발생(1000개 상태) | |
| 50.0%(표준 상태) | a | b | c | d | e | f | 0 | g | h | i | 0도 | 0 default(definition) | 0ghi | (0–7) (0–7) (0–7) | 작은 숫자 세 개 | 51.2%(주) | |
| 37.5%(384개 주) | a | b | c | d | e | f | 1 | 0 | 0 | i | 0도 | 0 default(definition) | 100i | (0–7) (0–7) (8–9) | 작은 숫자 두 개, 큰 것 하나 | 38.4%(384개 주) | |
| a | b | c | g | h | f | 1 | 0 | 1 | i | 0도 | 100도 | 0ghi | (0–7) (8–9) (0–7) | ||||
| g | h | c | d | e | f | 1 | 1 | 0 | i | 100c | 0 default(definition) | 0ghi | (8–9) (0–7) (0–7) | ||||
| 9.375%(96개 주) | g | h | c | 0 | 0 | f | 1 | 1 | 1 | i | 100c | 100도 | 0ghi | (8–9) (8–9) (0–7) | 작은 자릿수 하나, 큼직한 두 개 | 9.6%(96개 주) | |
| d | e | c | 0 | 1 | f | 1 | 1 | 1 | i | 100c | 0 default(definition) | 100i | (8–9) (0–7) (8–9) | ||||
| a | b | c | 1 | 0 | f | 1 | 1 | 1 | i | 0도 | 100도 | 100i | (0–7) (8–9) (8–9) | ||||
| 3.125%(32개 상태, 8개 사용) | x | x | c | 1 | 1 | f | 1 | 1 | 1 | i | 100c | 100도 | 100i | (8–9) (8–9) (8–9) | 3자리 큰 숫자, 비트 b9 및 b8은 상관없습니다. | 0.8%(8개 상태) | |
모두 8 또는9 의 자리수의 8 자리수의 10 진수치에는, 각각 4 개의 부호화가 있습니다.위의 표에서 x로 표시된 비트는 입력 시 무시되지만 계산된 결과에서는 항상 0입니다(8 × 3 = 24 비표준 인코딩은 10 = 1000과10 2 = 1024 사이의 간격을3 채웁니다).
위의 경우 true significant와 디코딩된 10진수 시퀀스로 표시되는 값은 다음과 같습니다.
레퍼런스
- ^ IEEE Computer Society (2008-08-29). IEEE Standard for Floating-Point Arithmetic. IEEE. doi:10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008. Retrieved 2016-02-08.
- ^ "ISO/IEC/IEEE 60559:2011". 2011. Retrieved 2016-02-08.
{{cite journal}}:Cite 저널 요구 사항journal=(도움말) - ^ a b Muller, Jean-Michel; Brisebarre, Nicolas; de Dinechin, Florent; Jeannerod, Claude-Pierre; Lefèvre, Vincent; Melquiond, Guillaume; Revol, Nathalie; Stehlé, Damien; Torres, Serge (2010). Handbook of Floating-Point Arithmetic (1 ed.). Birkhäuser. doi:10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN 2009939668.
- ^ Cowlishaw, Michael Frederic (2007-02-13) [2000-10-03]. "A Summary of Densely Packed Decimal encoding". IBM. Archived from the original on 2015-09-24. Retrieved 2016-02-07.