IBM 16진 부동 소수점

IBM hexadecimal floating-point

16진수 부동소수점(현재 IBM에 의해 HFP라고 함)은 IBM System/360 컴퓨터에 처음 도입된 부동소수점 번호를 인코딩하는 형식이며,[1][2][3] 이 아키텍처를 기반으로 하는 후속 머신과 System/[4][5]360과의 애플리케이션 호환성을 의도한 머신에서 지원됩니다.

IEEE 754 부동소수에 비해 HFP 포맷은 더 길고짧은 지수를 가진다.모든 HFP 형식에는 7비트의 지수와 64의 바이어스가 있습니다.대표 가능한 숫자의 정규화 범위는 16 ~ 16이다−6563(약 5.39761 × 10−79 ~ 7.237005 × 1075).

숫자는 (-1)sign × 0.significand × 16exponent−64) 공식으로 표현된다.

단정도 32비트

단정도 HFP 번호(IBM에서는 "짧은"이라고 함)는 32비트 단어로 저장됩니다.

1 7 24 (비트 단위의 폭)
S 유효 기간 분율
31 30 ... 24 23 ... 0 (비트 인덱스)*
* IBM 문서에서는 왼쪽에서 오른쪽으로 비트의 번호를 매겨 최상위 비트가 비트 번호 0으로 지정됩니다.

이 형식에서는 초기 비트는 억제되지 않으며 기수(16진수) 포인트는 유효치(IBM 문서 및 그림의 분절)의 왼쪽으로 설정됩니다.

베이스가 16이기 때문에 이 형식의 지수는 IEEE 754의 약 2배입니다.2진수로 같은 지수 범위를 가지려면 9개의 지수 비트가 필요합니다.

값 -118.625를 HFP 단정도 부동소수점 값으로 인코딩하는 것을 검토해 주십시오.

값은 음수이므로 부호 비트는 1입니다.

이진수 값 118.625는10 1110.1102.101입니다.이 값은 왼쪽 끝 자리가 0이 될 때까지 한 번에 4비트(16진수 자리) 왼쪽으로 이동하여 0.011101101을2 산출함으로써 정규화됩니다.나머지 오른쪽 끝 자리에는 0이 패딩되어 있으며, 24비트 프랙션 0.0111 0110 1010 00002 0000 0000 이 됩니다.

정규화된 값은 기수 포인트를 16진수로 두 자리 이동시켜 승수와 지수를 16으로+2 산출했습니다.+64의 치우침이 지수(+2)에 더해져 +66, 즉 100 0010을2 산출합니다.

부호, 지수 더하기 바이어스 및 정규화된 분수를 조합하면 다음과 같은 인코딩이 생성됩니다.

S 유효 기간 분율
1 100 0010 0111 0110 1010 0000 0000 0000

즉, 표시된 숫자는 -0.76A00016 × 1666 − 64 = -0.4633789… × 16+2 = -180.625이다.

최대 대표수

S 유효 기간 분율
0 111 1111 1111 1111 1111 1111 1111 1111

표시된 숫자는 +0 입니다.FFFFF16 × 16127 − 64 = (1 - 16−6) × 1663 µ +7.2370051 × 1075

최소 양의 정규화 수

S 유효 기간 분율
0 000 0000 0001 0000 0000 0000 0000 0000

표시된 숫자는 +0.116 × 160 − 64 = 16−1 × 16−64 + +5.397605 × 10이다−79.

S 유효 기간 분율
0 000 0000 0000 0000 0000 0000 0000 0000

0(0.0)은 모든 0비트로 정규화된 형태로 표현되며, 이 값은 산술적으로 +016.00 − 64 × 16 0 +0−64.000000−79 × 10 = 0입니다. 모든 비트 0의 일부에 대해 양의 또는 음의 부호 비트와 0이 아닌 바이어스 지수의 조합은 산술적으로 0과 동일한 값을 산출합니다.단, CPU 하드웨어에 의해 제로용으로 생성되는 정규화된 형식은 모두 비트제로입니다.이는 3개의 부동소수점 정밀도 형식에 모두 해당됩니다.다른 지수 값과의 덧셈 또는 뺄셈은 결과에서 정밀도를 잃을 수 있습니다.

정밀도 문제

기본값이 16이므로 바이너리 유의값에는 최대 3개의 선행 제로 비트가 있을 수 있습니다.즉, 숫자를 2진수로 변환할 때 21비트 정도의 정밀도가 존재할 수 있습니다."흔들리는 정밀도" 효과로 인해 일부 계산이 매우 부정확해질 수 있습니다.이것은 상당한 [6]비난을 불러일으켰다.

부정확성의 좋은 예로는 10진수 값 0.1을 들 수 있습니다.정확한 이진수 또는 16진수 표현은 없습니다.16진수 형식에서는 0.199999로 16표시됩니다.또는 0.0001 1001 1001 1001 1001... 즉,2 다음과 같습니다.

S 유효 기간 분율
0 100 0000 0001 1001 1001 1001 1001 1010

바이너리 버전은 정밀도가 24비트인 반면, 이것은 21비트밖에 없습니다.

정밀도 6자리 16진수는 10진수 6자리(즉10, (6 - 1) log(16) 6 6.02)와 거의 동일합니다.단일 정밀 16진수 플로트를 10진수 스트링으로 변환하려면 최소 9자리 유효 자릿수(610 log(16) + 1 ≤ 8.22)가 필요합니다.

배정도 64비트

2배 정밀도 HFP 형식(IBM에서는 "긴"이라고 함)은 fraction 필드가 더 넓고 2배 정밀도 번호가 2배 워드(8바이트)에 저장된다는 점을 제외하고는 "짧은" 형식과 동일합니다.

1 7 56 (비트 단위의 폭)
S 유효 기간 분율
63 62 ... 56 55 ... 0 (비트 인덱스)*
* IBM 문서에서는 왼쪽에서 오른쪽으로 비트의 번호를 매겨 최상위 비트가 비트 번호 0으로 지정됩니다.

이 포맷의 지수는 대응하는 IEEE 바이너리 포맷으로서 범위의 약 4분의 1만을 커버합니다.

정밀도 14자리 16진수는 소수점 17자리와 거의 동일합니다.배정도 16진수 플로트를 10진수 스트링으로 변환하려면 18자리 이상의 유효 자릿수가 필요합니다.

정밀도 확장 128비트

IBM에서 확장 정밀도라고 부르는 4배 정밀도의 HFP 형식이 System/370 시리즈에 추가되었으며 일부 S/360 모델(S/360-85, -195 등)에서 특별한 요청에 의해 제공되거나 OS 소프트웨어에 의해 시뮬레이션되었습니다.Extended-precision fraction 필드는 더 넓고 Extended-precision 번호는 다음 2개의 더블워드(16바이트)로 저장됩니다.

상위 부품
1 7 56 (비트 단위의 폭)
S 유효 기간 분수(14자리 상위)
127 126 ... 120 119 ... 64 (비트 인덱스)*
하위 부품
8 56 (비트 단위의 폭)
미사용 분수(14자리 하위)
63 ... 56 55 ... 0 (비트 인덱스)*
* IBM 문서에서는 왼쪽에서 오른쪽으로 비트의 번호를 매겨 최상위 비트가 비트 번호 0으로 지정됩니다.

28 자리수의 16 진수는 대략 32 자리수의 10 진수에 상당합니다.확장 정밀도 HFP를 10진수 문자열로 변환하려면 적어도 35자리의 유효 자릿수가 필요합니다.하위 부품에 저장된 지수는 0보다 작지 않은 한 상위 부품보다 14 작습니다.

산술 연산

사용할 수 있는 산술 연산은 정규화 연산과 비정규화 연산 모두 더하기 및 빼기 연산과 비교입니다.사전 정규화는 지수 차이에 따라 수행됩니다.정규화되지 않은 값을 곱하고 나눈 다음 가드 자리 하나 뒤에 결과를 잘라냅니다.2로 나누기를 단순화하는 반값 연산이 있습니다.ESA/390부터는 제곱근 연산이 있습니다.모든 작업에는 정밀도 손실을 방지하기 위해 16진수 가드 디지트가 1개 있습니다.대부분의 산술 연산은 단순한 포켓 계산기처럼 잘립니다.따라서 1 - 16−8 = 1 입니다.이 경우 결과는 [7]0에서 반올림됩니다.

IBM 메인프레임에서의 IEEE 754

1998년 [8]S/390 G5를 시작으로 IBM 메인프레임에는 IEEE 754 부동 소수점 산술 표준을 준수하는 IEEE 이진 부동 소수점 장치도 포함되어 있습니다.IEEE 10진 부동 소수점은 2007년 밀리코드[10] 사용하여 IBM System z9[9] GA2에, 2008년 하드웨어에서 IBM System [11]z10에 추가되었습니다.

최신 IBM 메인프레임은 3개의 16진수(HFP) 형식, 3개의 2진수(BFP) 형식 및 3개의 10진수(DFP) 형식을 가진 3개의 부동소수점 전파를 지원합니다.코어마다 2개의 부동소수점 유닛이 있습니다.하나는 HFP와 BFP를 지원하며 이제1개는 DFP를 지원하며 FPR이라는 레지스터 파일이1개 있어요이 파일에는 3가지 형식이 모두 저장되어 있습니다.2015년 z13부터 프로세서는 32개의 벡터 레지스터를 포함하는 벡터 기능을 추가했습니다. 벡터 레지스터는 64비트 또는 32비트 부동소수점 숫자 [12]2개를 포함할 수 있습니다.기존의 16개의 부동소수점 레지스터는 새로운 벡터 레지스터에 중첩되어 있기 때문에 일부 데이터는 기존의 부동소수점 명령 또는 새로운 벡터 명령으로 조작할 수 있습니다.

특수 용도

IBM HFP 형식은 다음에서 사용됩니다.

  • SAS 5 전송 파일(.X)미국 식품의약국(FDA)의 신약 신청(NDA) 연구 [13]제출에 따라 PT).
  • 날씨 예측 모델의 출력을 교환하기 위한 GRIB(Grided Binary) 데이터 파일(현재 버전에서는 IEEE 단정도 부동소수점 형식),
  • GDS II(Graphic Database System II) 형식 파일(OASIS가 대체) 및
  • SEG Y(Society of Explorer Geophysicists Y) 형식 파일([14]IEEE 단정도 부동 소수점은 2002년에 형식에 추가되었습니다).

IBM은 HFP 형식을 사용하는 유일한 하드웨어 제공업체이며, 이 형식을 지원하는 IBM 시스템은 메인프레임뿐이므로 필요한 파일 형식은 거의 없습니다.한 가지 예외는 SAS 5 Transport 파일 형식입니다. FDA가 요구하는 "파일의 모든 부동 소수점 번호는 IBM 메인프레임 표현을 사용하여 저장됩니다. [...] 대부분의 플랫폼은 IEEE 표현을 부동 소수점 번호로 사용합니다. [...] 전송 파일 읽기 및/또는 쓰기를 지원하기 위해 루틴 t를 제공합니다.o IEEE 표현(빅 엔디안 또는 리틀 엔디안)에서 트랜스포트 표현으로 변환하고 다시 [13]되돌립니다."IBM 포맷용 코드는 LGPLv2.[15]1에서도 사용할 수 있습니다.

IBM 부동 소수점 형식을 사용하는 시스템

「 」를 참조해 주세요.

레퍼런스

  1. ^ IBM System/360 작동 원리, IBM 간행물 A22-6821-6, 제7판(1967년 1월 13일), 페이지 41-50
  2. ^ IBM System/370 작동 원리, IBM 간행물 GA22-7000-4, 제5판(1975년 9월 1일), 페이지 157-170
  3. ^ z/Architecture Principles of Operation, IBM Publications SA22-7832-01, Second Edition(2001년 10월), 9장.
  4. ^ Xerox Data Systems (Oct 1973). Xerox SIGMA 7 Computer Reference Manyal. p. 48. Retrieved Nov 13, 2020.
  5. ^ RCA (Mar 1966). Spectra 70 processors: 35 45 55 (PDF). p. 184. Retrieved Nov 13, 2020.
  6. ^ Warren Jr., Henry S. (2013) [2002]. "The Distribution of Leading Digits". Hacker's Delight (2 ed.). Addison Wesley - Pearson Education, Inc. pp. 385–387. ISBN 978-0-321-84268-8. 0-321-84268-5.
  7. ^ ESA/390 확장 부동 소수점 지원: 개요
  8. ^ Schwarz, E. M.; Krygowski, C. A. (September 1999). "The S/390 G5 floating-point unit". IBM Journal of Research and Development. 43 (5.6): 707–721. doi:10.1147/rd.435.0707.
  9. ^ Duale, A. Y.; Decker, M. H.; Zipperer, H.-G.; Aharoni, M.; Bohizic, T. J. (January 2007). "Decimal floating-point in z9: An implementation and testing perspective". IBM Journal of Research and Development. 51 (1.2): 217–227. CiteSeerX 10.1.1.123.9055. doi:10.1147/rd.511.0217.
  10. ^ Heller, L. C.; Farrell, M. S. (May 2004). "Millicode in an IBM zSeries processor". IBM Journal of Research and Development. 48 (3.4): 425–434. CiteSeerX 10.1.1.641.1164. doi:10.1147/rd.483.0425.
  11. ^ Schwarz, E. M.; Kapernick, J. S.; Cowlishaw, M. F. (January 2009). "Decimal floating-point support on the IBM System z10 processor". IBM Journal of Research and Development. 53 (1): 4:1–4:10. doi:10.1147/JRD.2009.5388585.
  12. ^ z/아키텍처 동작 원리
  13. ^ a b "The Record Layout of a Data Set in SAS Transport (XPORT) Format" (PDF). Retrieved September 18, 2014.
  14. ^ "SEG Y rev 1 Data Exchange format, Release 1.0" (PDF). May 2002.
  15. ^ "Package 'SASxport'" (PDF). March 10, 2020.

추가 정보