Articles

두 번 정밀 부동 소수점 형식

정밀도 바이너리 부동 소수점은 일반적으로 사용되는 형식을 Pc,으로 인해 그것의 넓은 범위를 통해 하나의 정밀 부동 소수점에도 불구하고,그 성과 및 대역폭을 비용. 그것은 일반적으로 단순히 두 배로 알려져 있습니다. IEEE754 표준 지정 binary64 있으로.

  • 로 bit:1bit
  • 지수:11 조금
  • 기호 정밀도:53bits(52 명시적으로 저장)

호 비트를 결정한 표시의 번호(있는 경우를 포함 이수는 서명).

지수 필드는 편향된 형태로 0 에서 2047 까지의 11 비트 부호없는 정수입니다:1023 의 지수 값은 실제 0 을 나타냅니다. 지수의 범위는 -1022 에서+1023 까지이며 -1023(모두 0)및+1024(모두 1)의 지수가 특수 숫자로 예약되어 있기 때문입니다.

53 비트 유효 숫자 정밀도는 15 에서 17 의 유효 소수점 정밀도(2-53≈1.11×10-16)를 제공합니다. 면 십진수 문자열과 함께서 대부분의 15 중요한 자리 숫자로 변환되 IEEE754 배 정밀 표현,그리고 다음으로 다시 변환하여 십진수 문자열과 같은 숫자의 번호,최종 결과와 일치해야 원래의 문자열입니다. 는 경우 IEEE754 배 정밀번호로 변환하여 십진수 문자열과 함께서는 적어도 17 자리한 다음 다시 변환하여 두 번 정밀 표현,최종 결과 일치해야 합니다 원래의 번호입니다.

형식은 값 1 의 암시 적 정수 비트를 갖는 유효 숫자로 작성됩니다(특수 데이터는 제외하고 아래 지수 인코딩 참조). 메모리 포맷에 나타나는 분수(F)유효 숫자의 52 비트로,따라서 총 정밀도는 53 비트(약 16 진수,53log10(2)≈15.955)입니다. 비트는 다음과 같이 배치됩니다.

IEEE754 이중 부동 소수점 형식.svg

실제 가치로 간주하는 특정 64-bit 하는 정밀도 기준으로 주어진 바이어스 지수는 전자{\displaystyle e}

e

52-비율은(−1)기호(1. 비 51 비 50. . . b0)2×2e-1023{\displaystyle(-1)^{\text{sign}}(1.b_{51}b_{50}…b_{0})_{2}\times2^{e-1023}}

(-1)^{\text{sign}}(1.b_{51}b_{50}...b_{0})_{2}\배 2^{e-1023}

또는

(−1)기호(1+∑i=1 52b52−i2−i)×2e−1023{\displaystyle(-1)^{\text{명}}\left(1+\sum_{i=1}^{52}b_{52-i}2^{-i}\right)\배 2^{e-1023}}

(-1)^{\text{명}}\left(1+\sum_{i=1}^{52}b_{52-i}2^{-i}\right)\배 2^{e-1023}

사이 252=4,503,599,627,370,496 및 253=9,007,199,254,740,992 에 표현할 수 있는 숫자는 정확하게 정수입니다. 다음 범위의 경우 253 에서 254 까지 모든 것이 2 로 곱해 지므로 표현 가능한 숫자는 짝수 등입니다. 반대로,251 에서 252 까지의 이전 범위의 경우 간격은 0.5 등입니다.

2n 에서 2n+1 범위의 숫자의 분수로서의 간격은 2n-52 입니다.최대는 상대적인 라운딩할 때 오류가 반올림하여 숫자를 가장 가까운로 표현할 수 있는 하나의(기계 엡실론)에 따라서 2-53.

지수의 11 비트 너비는 10-308 과 10308 사이의 숫자를 전체 15-17 진수 정밀도로 표현할 수 있습니다. 정밀도를 손상시킴으로써 비정규 표현은 약 5×10-34 까지 더 작은 값을 허용합니다.

지수 encodingEdit

이중 정밀도 바이너리 부동 소수점수은 인코딩된 오프셋을 사용하면 이진수 표현으로,제로 오프셋 인 1023;으로도 알려진 지수 편견에 IEEE754 표준입니다. 이러한 표현이 될 것이다:

e=00000000001200116=1: 2 1 − 1023 = 2 − 1022 {\displaystyle 2^{1-1023}=2^{-1022}}

{\displaystyle 2^{1-1023}=2^{-1022}}
(smallest exponent for normal numbers)
e =0111111111123ff16=1023: 2 1023 − 1023 = 2 0 {\displaystyle 2^{1023-1023}=2^{0}}

{\displaystyle 2^{1023-1023}=2^{0}}
(zero offset)
e =10000000101240516=1029: 2 1029 − 1023 = 2 6 {\displaystyle 2^{1029-1023}=2^{6}}

{\displaystyle 2^{1029-1023}=2^{6}}
e =1111111111027fe16=2046: 2 2046 − 1023 = 2 1023 {\displaystyle 2^{2046-1023}=2^{1023}}

{\displaystyle 2^{2046-1023}=2^{1023}}
(highest exponent)

The exponents 00016 and 7ff16 have a special meaning:

  • 00000000000200016 is used to represent a signed zero (if F = 0) and subnormals (if F ≠ 0); 그리고
  • 1111111111127ff16을 나타내는 데 사용됩∞(는 경우 F=0),Nan(는 경우 F≠0),

어디 F 은 소수의 일부 기호. 모든 비트 패턴은 유효한 인코딩입니다.

위의 예외를 제외하고 전체 배정밀도 수는 다음과 같이 설명됩니다.

(−1)기호×2e−1023×1. 분수{\displaystyle(-1)^{\text{sign}}\times2^{e-1023}\times1.{\text{fraction}}}

{\displaystyle(-1)^{\text{sign}}\times2^{e-1023}\times1.{\text{fraction}}}

subnormals(e=0)의 경우 배정밀도 수는 다음과 같이 설명됩니다.

(-1)부호×2 1−1023×0. 분수=(−1)부호×2-1022×0. 분수{\displaystyle(-1)^{\text{sign}}\times2^{1-1023}\times0.{\텍스트{분수}}=(-1)^{\텍스트{서명}}\번 2^{-1022}\번 0.{\text{fraction}}}

{\displaystyle(-1)^{\text{sign}}\times2^{1-1023}\times0.{\텍스트{분수}}=(-1)^{\텍스트{서명}}\번 2^{-1022}\번 0.{\text{분}}}

EndiannessEdit

이 섹션은 발췌로서 엔디안§부동 소수점
지만 유비쿼터스 86 프로세서는 오늘날의 사용 little-endian 저장소에 대한 모든 유형의 데이터(정수,부동 소수점), 의 숫자가 하드웨어 아키텍처에 있는 부동 소수점번호는 표현에서 큰-endian 는 동안 양식 정수를 표현에 little-endian 형태입니다. 배정밀도 숫자에 대해 절반의 리틀 엔디안,절반의 빅 엔디안 부동 소수점 표현이있는 ARM 프로세서가 있습니다: 두 32 비트 단어는 모두 정수 레지스터와 같은 리틀 엔디안에 저장되지만 가장 중요한 것은 먼저 저장됩니다. 되었기 때문에 많은 부동 소수점 형식 없이”네트워크”표준이 그들을 위해,XDR 표준을 사용하-endian IEEE754 으로 표현입니다. 그것을 할 수 있습니다 따라서 나타나는 것이 이상한 광범위한 IEEE754 부동 소수점 기준을 지정하지 않 엔디안. 이론적으로,이 의미는 표준 IEEE 부동 소수점에 작성된 데이터에 의해 하나의 기계에서는 읽을 수 없습니다. 그러나 현대 표준 컴퓨터에서는(즉 구현 IEEE754),하나 있습니다 실제로 안전하게 가는 엔디안은 동일한 부동 소수점으로 숫자를 위해 정수,변환 간단에 관계 없이 데이터의 유형입니다. (그러나 특수 부동 소수점 형식을 사용하는 소형 임베디드 시스템은 또 다른 문제 일 수 있습니다.)

배정밀도 예제디트

0 01111111111 00000000000000000000000000000000000000000000000000002≙3FF0 0000 0000 000016 ≙ +20 × 1 = 1

0 01111111111 00000000000000000000000000000000000000000000000000012≙3FF0 0000 0000 000116 ≙ +20 × (1 + 2-52) ≈ 1.0000000000000002, the smallest number > 1

0 01111111111 00000000000000000000000000000000000000000000000000102 ≙ 3FF0 0000 0000 000216 ≙ +20 × (1 + 2−51) ≈ 1.0000000000000004

0 10000000000 00000000000000000000000000000000000000000000000000002 ≙ 4000 0000 0000 000016 ≙ +21 × 1 = 2

1 10000000000 00000000000000000000000000000000000000000000000000002 ≙ C000 0000 0000 000016 ≙ −21 × 1 = −2

0 10000000000 10000000000000000000000000000000000000000000000000002 ≙ 4008 0000 0000 000016 ≙ +21 × 1.12 = 112 = 3

0 10000000001 00000000000000000000000000000000000000000000000000002 ≙ 4010 0000 0000 000016 ≙ +22 × 1 = 1002 = 4

0 10000000001 01000000000000000000000000000000000000000000000000002 ≙ 4014 0000 0000 000016 ≙ +22 × 1.012 = 1012 = 5

0 10000000001 10000000000000000000000000000000000000000000000000002 ≙ 4018 0000 0000 000016 ≙ +22 × 1.12 = 1102 = 6

0 10000000011 01110000000000000000000000000000000000000000000000002 ≙ 4037 0000 0000 000016 ≙ +24 × 1.01112 = 101112 = 23

0 01111111000 10000000000000000000000000000000000000000000000000002 ≙ 3F88 0000 0000 000016 ≙ +2−7 × 1.12 = 0.000000112 = 0.01171875 (3/256)

0 00000000000 00000000000000000000000000000000000000000000000000012 ≙ 0000 0000 0000 000116 ≙ +2−1022 × 2−52 = 2−1074
≈ 4.9406564584124654 × 10−324 (Min. subnormal positive double)

0 00000000000 11111111111111111111111111111111111111111111111111112 ≙ 000F FFFF FFFF FFFF16 ≙ +2−1022 × (1 − 2−52)
≈ 2.2250738585072009 × 10−308 (Max. subnormal double)

0 00000000001 00000000000000000000000000000000000000000000000000002 ≙ 0010 0000 0000 000016 ≙ +2−1022 × 1
≈ 2.2250738585072014 × 10−308 (Min. normal positive double)

0 11111111110 11111111111111111111111111111111111111111111111111112 ≙ 7FEF FFFF FFFF FFFF16 ≙ +21023 × (1 + (1 − 2−52))
≈ 1.7976931348623157 × 10308 (Max. Double)

0 00000000000 00000000000000000000000000000000000000000000000000002 ≙ 0000 0000 0000 000016 ≙ +0

1 00000000000 00000000000000000000000000000000000000000000000000002 ≙ 8000 0000 0000 000016 ≙ −0

0 11111111111 00000000000000000000000000000000000000000000000000002 ≙ 7FF0 0000 0000 000016 ≙ +∞ (positive infinity)

1 11111111111 00000000000000000000000000000000000000000000000000002 ≙ FFF0 0000 0000 000016 ≙ −∞ (negative infinity)

0 11111111111 00000000000000000000000000000000000000000000000000012 ≙ 7FF0 0000 0000 000116 ≙ NaN (sNaN on most processors, such as x86 and ARM)

0 11111111111 10000000000000000000000000000000000000000000000000012 ≙ 7FF8 0000 0000 000116 ≙ NaN (qNaN on most processors, such as x86 and ARM)

0 11111111111 11111111111111111111111111111111111111111111111111112≙7FFF FFFF FFFF FFFF16≙NaN(NaN 의 대체 인코딩)

0 01111111101 01010101010101010101010101010101010101010101010101012=3FD5 5555 5555 555516 ≙ +2-2 × (1 + 2-2 + 2-4 + … +2-52)≈1/3

0 10000000000 10010010000111111011010101000100010000101101000110002=4009 21FB5444 2D1816≈pi

인코딩의 qNaN 및 sNaN 지 않은 완전에서 지정된 IEEE754 에 따라 달라집니다. X86 제품군 및 ARM 제품군 프로세서와 같은 대부분의 프로세서는 significand 필드의 가장 중요한 비트를 사용하여 조용한 NaN 을 나타냅니다. PA-RISC 프로세서는 시그널링 NaN 을 나타 내기 위해 비트를 사용합니다.

기본적으로 1/3 은 significand 의 홀수 비트 때문에 단일 정밀도와 같이 up 대신 아래로 반올림됩니다.

자세히

Given the hexadecimal representation 3FD5 5555 5555 555516, Sign = 0 Exponent = 3FD16 = 1021 Exponent Bias = 1023 (constant value; see above) Fraction = 5 5555 5555 555516 Value = 2(Exponent − Exponent Bias) × 1.Fraction – Note that Fraction must not be converted to decimal here = 2−2 × (15 5555 5555 555516 × 2−52) = 2−54 × 15 5555 5555 555516 = 0.333333333333333314829616256247390992939472198486328125 ≈ 1/3

실행 속도를 더 정밀 arithmeticEdit

배정밀도를 사용하여 부동 소수점 변수 및 수학적 기능(예를들면,sin,cos,atan2,log,exp 및 sqrt)은보다 느리게 작동하는 그들의 하나의 정밀도니다. 이것이 특정 문제인 컴퓨팅의 한 영역은 Gpu 에서 실행되는 병렬 코드입니다. 예를 들어,사용하는 경우 엔비디아의 쿠 플랫폼,계산 배정도 취에 따라,하드웨어,약 2~32 번으로 장을 완료하는 사람에 비해 사용하여 수행 하나의 정밀도입니다.

정밀한 제한 사항에 정수 valuesEdit

  • 정 -253 253(-9007199254740992 을 9007199254740992)확하게 표현할 수
  • 사이의 정수 253 및 254=18014398509481984 라운드를 여러 개의 2(짝수)
  • 사이의 정수 254 255=36028797018963968 라운드를 여러 개의 4

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다