10진수 128 부동소수점 형식
decimal128 floating-point format| 부동 소수점 포맷 |
|---|
| IEEE 754 |
| 다른. |
컴퓨팅에서 decimal128은 컴퓨터 메모리에서 16바이트(128비트)를 차지하는 10진수 부동소수점 컴퓨터 번호부여 형식입니다.이는 재무 및 세금 [1]계산과 같이 소수점 반올림을 정확하게 에뮬레이트해야 하는 애플리케이션을 위한 것입니다.
Decimal128은 34자리 소수 및 -6143 ~ +6144의 지수 범위를 지원합니다(예: ±0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000~−6143106144따라서 decimal128은 다른 IEEE 기본 부동소수점 형식과 비교하여 값의 범위가 가장 넓습니다.유의와가 정규화되지 않았기 때문에 유효 자릿수가 34 미만인 대부분의 값은 1 × 102 = 0.1 × 103 = 0.01 × 104 등 여러 가지 가능한 표현을 갖는다.제로에는 12288개의 표현이 있습니다(서명된 제로가 모두 포함되어 있는 경우는 24576).
Decimal128 부동소수점 형식은 비교적 새로운 10진수 부동소수점 형식으로 2008년판[2] IEEE 754 및 ISO/IEC/IEE 60559:[3]2011에서 정식으로 도입되었습니다.
10진수 128값의 표현
| 서명하다 | 조합 | 중요성과 계속성 |
|---|---|---|
| 1비트 | 17비트 | 110 비트 |
| s | 음mmmmmmmmmmmmmm | cccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 에서는, 10진수 128 의 값에 대해서, 2 개의 대체 표현 방법을 사용할 수 있습니다.예를 들어 10진수128 값이 시스템 간에 통신되는 상황에서 사용되는 표현을 나타내는 방법은 표준에서 규정하지 않습니다.
하나의 표현방법에서 2진수 정수 10진수(BID)에 기초하여 유의와 를 2진수 부호화 정의 정수로 나타낸다.
또 다른 표현 방법은 대부분의 유의 및 (가장 유의한 숫자를 제외한) 촘촘히 채워진 10진수(DPD)에 기초한다.
두 가지 대안 모두 정확히 동일한 범위의 대표 가능한 숫자를 제공합니다. 즉, 유효값 34자리와 가능한 지수값 3 × 212 = 12288입니다.
어느 경우든 significant의 최상위 4비트(실제로 10개의 가능한 값만 있음)와 지수 최상위 2비트(3개의 가능한 값)를 조합하여 조합 필드에서 5비트의 32개의 가능한 값 중 30개를 사용합니다.나머지 조합은 인피니티와 NaN을 인코딩합니다.
| [ Combination(Combination)]필드 | 지수 | 중요 및 Msbits | 다른. |
|---|---|---|---|
| 004mmmmmmmm | 00xxxxxxxxxxxxxxxxxxx | 0cc | — |
| 01µmmmmmm | 01xxxxxxxxxxxxxxxxxx | 0cc | — |
| 10µmmmmmm | 10xxxxxxxxxxxxxxxxxxx | 0cc | — |
| 1100mmmm | 00xxxxxxxxxxxxxxxxxxx | 100c | — |
| 1101 µmmmm | 01xxxxxxxxxxxxxxxxxx | 100c | — |
| 1110 µmmmm | 10xxxxxxxxxxxxxxxxxxx | 100c | — |
| 11110 µmmmm | — | — | ± 무한도 |
| 11111 µmmmm | — | — | NaN. 사인이 무시되었습니다.조합 필드의 6비트에 따라 NaN이 시그널링 중인지 여부가 결정됩니다. |
Infinity 및 NaN의 경우 인코딩의 다른 모든 비트는 무시됩니다.따라서 배열을 1바이트 값으로 채워 Infinities 또는 NaN으로 초기화할 수 있습니다.
이진 정수 유의 필드
이 형식은 0 ~ 1034 - 1의 이진수를 사용합니다.= 99999999999999999999999999999 = 1ED09BEAD87C0378D8E63FFFFF16 = 01111010000110101011001101100110001101100001101110001111111111111111111100011111111111111111111111111111111111111111111111111111111112.인코딩은 최대 10 × 2110 - 1 = 12980742146337069071326240823050239의 이진수를 나타낼 수 있지만 10 - 1보다34 큰 값은 불법입니다(또한 표준에서는 입력 시 0으로 취급해야 합니다).
위에서 설명한 바와 같이 부호화는 의 최상위4비트가 0 ~7(00002 ~01112) 또는 그 이상(1000 또는 10012)인지2 여부에 따라 달라집니다.
부호 비트 뒤의 2비트가 "00", "01" 또는 "10"인 경우, 지수 필드는 부호 비트 뒤의 14비트로 구성되며, significant는 암묵적인 선행 0비트로 나머지 113비트가 됩니다.
s 00eeeeee (0) ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt ttt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tttttttttttttttttttttttttttttt
여기에는 선행 유효 자릿수가 0인 정규 이하의 숫자가 포함됩니다.
부호 비트 뒤의 2비트가 "11"인 경우 14비트 지수 필드는 오른쪽으로 2비트 이동하며(그 후 부호 비트와 "11" 비트 모두 뒤), 표시된 유의는 나머지 111비트에 있습니다.이 경우 true signand에는 암묵적인(즉, 저장되지 않은) 선두의 3비트 시퀀스 "100"이 있습니다.
s 1100eeeeee (100) tttttttt tttt tttt tttt tttt tttt tttt tttt tttt tttt tttt tttt tttt tt ttt ttt tttt tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
부호 비트 뒤에 오는 "11" 2비트 시퀀스는 의미자에 대한 암묵적인 "100" 3비트 프리픽스가 있음을 나타냅니다.바이너리 포맷의 정상값과 유의값 사이에 암묵적인 1이 있는 것을 비교합니다."00", "01" 또는 "10" 비트는 지수 필드의 일부입니다.
decimal128 형식의 경우 이들 모든 시그니처는 유효한 범위를 벗어납니다(2 > 1.038 × 10으로34 시작113).따라서 0으로 디코딩되지만 패턴은 decimal32 및 decimal64와 동일합니다.
위의 경우 표시되는 값은 다음과 같습니다.
- (-1)sign × 10exponent−6176 × 유의
부호 비트 뒤의 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비트로 결합됩니다.
그 후의 이 12비트는 지수 연속 필드이며, 지수의 중요도가 낮은 비트를 제공합니다.
마지막 110비트는 중요 및 연속 필드이며 11개의 10비트 데클레트로 [4]구성됩니다.각 디클레트는 DPD 부호화를 사용하여 10진수[4] 3자리를 부호화합니다.
부호 비트 뒤의 처음 2비트가 "00", "01" 또는 "10"인 경우, 이러한 비트는 지수의 선두 비트이며, 그 뒤의 3비트는 선두 10진수(0 ~ 7)로 해석됩니다.
s 00 TTT (00) eeeeeee (0TT) [ ttttttt] [ ttttttt] [ tttttttt ][ tttttt ][ tttttttt ][ tttttttt ][ tttttttttt ](10) 이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이(이이이이이이이이이이이이이이이이이이이이이이이이이이이이이이
부호 비트 뒤의 처음 2비트가 "11"인 경우, 두 번째 2비트는 지수의 선두 비트이고 마지막 비트에는 "100"이 접두되어 선두 10진수(8 또는 9)를 형성합니다.
s 1100 T (00) eeeeeee (100T) [tttttttt][tttttttt][ttttttt][ttttttt][ttttttt][ttttttt][ttttttttt][ttttttttttt](10) eeeeeee (100T) [tttttt] [ttttttt] [tttttttt] [ttttttt] [ttttttt] [ttttttttt] [ttttttttt] [ttttttttttttttttt] [ tttttttttttt]
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진수 시퀀스로 표시되는 값은 다음과 같습니다.
「 」를 참조해 주세요.
- ISO/IEC 10967, 언어에 의존하지 않는 산술
- 원시 데이터 유형
레퍼런스
- ^ Cowlishaw, Mike (2007). "Decimal Arithmetic FAQ – Part 1 – General Questions". speleotrove.com. IBM Corporation. Retrieved 2022-07-29.
- ^ 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.
- ^ "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.