Odwzorowanie liczby zmiennoprzecinkowej IEEE

Microsoft Visual C++ jest zgodne z normą IEEE numeryczne.Istnieją trzy odmiany wewnętrznego liczb rzeczywistych.Prawdziwe * 4 i prawdziwe * 8 są używane w programie Visual C++.Prawdziwe * 4 są zadeklarowane za pomocą słowa float.Prawdziwe * 8 są zadeklarowane za pomocą słowa Podwójna.W programowaniu Windows 32-bitowe, long double mapy do typu danych Podwójna.Ma jednak, obsługę języka asemblera obliczeń przy użyciu rzeczywistych * typ danych 10.

Wartości są przechowywane w następujący sposób:

Wartość

Przechowywane jako

prawdziwe * 4

Zarejestruj bit, 8-bitowy wykładnik, mantysy 23-bitowy

prawdziwe * 8

Zarejestruj bit, wykładnik 11 bit, 52 bitach mantysy

prawdziwe * 10

Zarejestruj bit, wykładnik 15 bitów, mantysy 64-bitowe

W czasie rzeczywistym * 4 i prawdziwe * 8 formatów, w który nie jest przechowywany w pamięci, więc mantissas są faktycznie 53 lub 24 bitów, mimo że są przechowywane tylko 23 lub 52 bitach mantysy jest założonej 1 wiodących.Prawdziwe * 10 format faktycznie przechowuje ten bit.

Wykładnikami obciążona są o połowę ich możliwych wartości.Oznacza to, że odjąć tego błędu z przechowywanych wykładnik uzyskanie rzeczywistej wykładnik.Jeśli wykładnik przechowywana jest mniejsza niż bias, to faktycznie ujemne wykładnik potęgi.

Wykładnikami obciążona są w następujący sposób:

Wykładnik

Obciążona przez

8-bitowych (real * 4)

127

11-bitowych (real * 8)

1023

15-bitowych (real * 10)

16383

Tych liczbach w zapisie wykładniczym nie są uprawnienia dziesięciu; są to kompetencje dwóch.Oznacza to wykładnikami przechowywanych 8-bitowych można maksymalnie 127.Wartość 2 ** 127 odpowiada mniej więcej 10 ** 38, które jest to rzeczywisty limit rzeczywistym * 4.

Mantysy jest przechowywana jako ułamek binarne formularza 1.XXX... .Ten ułamek ma wartość większą niż lub równą 1 i mniej niż 2.Należy zauważyć, że liczby rzeczywiste są zawsze przechowywane w znormalizowanej formie; to znaczy mantysy jest lewo przesunięty takie, że bit znaczących mantysy jest zawsze 1.Ponieważ ten bit jest zawsze 1, zakłada się (nie przechowywane) w rzeczywistym * 4 i prawdziwe * 8 formatów.Binarny (nie dziesiętny) punkt zakłada się, że na prawo wiodących 1.

Format, następnie, dla różnych rozmiarów jest w następujący sposób:

Formatuj

1 BAJT

BAJT 2

BAJT 3

4 BAJTÓW

...

N BAJTÓW

prawdziwe * 4

SXXX XXXX

XMMM MMMM

MMMM MMMM

MMMM MMMM

 

 

prawdziwe * 8

SXXX XXXX

XXXX MMMM

MMMM MMMM

MMMM MMMM

...

MMMM MMMM

prawdziwe * 10

SXXX XXXX

XXXX XXXX

1MMM MMMM

MMMM MMMM

...

MMMM MMMM

Sreprezentuje bitem znaku X's to wykładnik bitów i M's są bitach mantysy.Należy zauważyć, że po lewej stronie bit zakłada, że w czasie rzeczywistym * 4 i prawdziwe * 8 formaty, ale jest obecny jako "1" w 3 BAJTU rzeczywistych * 10 format.

Przesunięcie punktu binarne poprawnie, możesz najpierw unbias wykładnik i następnie przenieść punkt binarne w prawo lub odpowiednią liczbę bitów w lewo.

Przykłady

Oto kilka przykładów w czasie rzeczywistym * 4, format:

  • W poniższym przykładzie bitem znaku jest zero, a przechowywana wykładnik jest 128 lub 100 0000 0 w formacie binarnym, który jest 127 plus 1.Mantysy przechowywana jest (1.) 000 0000... 0000 do 0000, który ma wprost wiodących 1 i binarne punktu, więc rzeczywisty mantysy jest jeden.

                        SXXX XXXX XMMM MMMM ... MMMM MMMM
    2   =  1  * 2**1  = 0100 0000 0000 0000 ... 0000 0000 = 4000 0000
    
  • Taki sam jak + 2, z tym wyjątkiem, że ustawiony jest bitem znaku.Ta zasada obowiązuje dla wszystkich liczb zmiennoprzecinkowych format IEEE.

    -2  = -1  * 2**1  = 1100 0000 0000 0000 ... 0000 0000 = C000 0000
    
  • Sam mantysy wykładnik zwiększa się o jeden (wartość obciążonej jest 129 lub 100 0000 1 w formacie binarnym.

    4  =  1  * 2**2  = 0100 0000 1000 0000 ... 0000 0000 = 4080 0000
    
  • Sam wykładnik mantysy jest większy o połowę — to (1.) 100 0000...0000 do 0000, który, ponieważ jest to ułamek binarne jest 1 1/2 (wartości ułamkowe cyfr są 1/2, 1/4, 1/8 i tak dalej).

    6  = 1.5 * 2**2  = 0100 0000 1100 0000 ... 0000 0000 = 40C0 0000
    
  • Wykładnik sam jako inne uprawnienia mantysy dwóch, znajduje się mniej niż dwa w 127 lub 011 1111 1 w formacie binarnym.

    1  = 1   * 2**0  = 0011 1111 1000 0000 ... 0000 0000 = 3F80 0000
    
  • Wykładnik obciążonej jest 126, 011 1111 0 w binarnych i mantysy jest (1.) 100 0000... 0000 do 0000, czyli 1 1/2.

    .75 = 1.5 * 2**-1 = 0011 1111 0100 0000 ... 0000 0000 = 3F40 0000
    
  • Dokładnie tak samo jak dwa chyba że reprezentujący 1/4 w jest ustawiony bit mantysy.

    2.5 = 1.25 * 2**1 = 0100 0000 0010 0000 ... 0000 0000 = 4020 0000
    
  • 1/10 to ułamek powtarzanej w formacie binarnym.Mantysy jest po prostu nieśmiały 1.6 i obciążonej wykładnik mówi, że 1.6 należy podzielić przez 16 (jest to 1 1101 011 w formacie binarnym, który jest 123 w zapisie dziesiętnym).Wykładnik PRAWDA jest 123-127 = 4, co oznacza, że współczynnik mnożenia wynosi 2 ** 4 = 1/16.Należy zauważyć, że mantysy przechowywana jest zaokrąglana w górę w ostatnio trochę — próba reprezentują unrepresentable numer tak dokładnie, jak to możliwe. (Przyczyna 1: 10 i 1/100 są nie do końca reprezentowanych w formacie binarnym jest podobne do przyczyny 1/3 jest nie do końca reprezentowanych w zapisie dziesiętnym.)

    0.1 = 1.6 * 2**-4 = 0011 1101 1100 1100 ... 1100 1101 = 3DCC CCCD
    
  • 0 = 1.0 * 2**-128 = all zeros--a special case.

Zobacz też

Informacje

Dlaczego liczby zmiennoprzecinkowe mogą tracić dokładność