arytmetyka zmiennopozycyjna

FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

arytmetyka zmiennopozycyjna

Post autor: FEMO »

Rozpatrzmy arytmetyki przenośne binary 16 a binary 32 o formacie opisanym w standardzie IEEE 754. Niech x będzie liczbą znormalizowaną o następującej reprezentacji bitowej w arytmetyce binary16

\(\displaystyle{ |s|c_{4}...c_{1}c_{0}|d_{1}...d_{}d_{10}|}\)

jaka jest reprezentacja bitowa tej samej liczby x w arytmetyce binary32?

jak rozwiązać to zadanie?
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

arytmetyka zmiennopozycyjna

Post autor: Fibik »

chyba jakoś tak:
|s|111c4..c0|d1..d10 0..0]
FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

arytmetyka zmiennopozycyjna

Post autor: FEMO »

sprawdziłem to dla jakiejś liczby i chyba raczej będzie tak:

|s|c4...c0 111|d1...d10 0...0|
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

arytmetyka zmiennopozycyjna

Post autor: Fibik »

A uwzględniłeś odwracanie słów, które występuje w procach intela?
FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

arytmetyka zmiennopozycyjna

Post autor: FEMO »

w czym występuje?
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

arytmetyka zmiennopozycyjna

Post autor: spajder »

chodzi o kowencję Little Endian. Nie ma ona tu znaczenia, liczbę tę odczytujemy jako całe 32 bity a nie po 8 bitów (choć w pamięci rzeczywiście będzie to poprzestawiane)
FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

arytmetyka zmiennopozycyjna

Post autor: FEMO »

wiec w koncu jak bedzie wygladala ta liczba?
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

arytmetyka zmiennopozycyjna

Post autor: Fibik »

Musisz to zwyczajnie przeliczyć:

zapis: s|c|d = s|...c1c0|d0d1...
\(\displaystyle{ x = (-1)^s\cdot 2^{c-b}\cdot d}\)

wykładnik: w = c-b

Dla float32 bias: b = 127 = 2^7-1 = 0111111b; długość c wynosi 8 bitów: lc = 8;
a dla tego 16 bitowego masz: lc = 5, czyli b = 2^4 - 1 = 15 = 01111,

czyli w float mamy takie coś:
w = c-127 i to musi być równe w przypadku 16 bitowego: w' = c' - 15
w = w', czyli c' - 15 = c-127 => c = c' + 127 - 15 = c' + 112 = c' + 01110000b

czyli wychodzi że trzeba dodać tam po prostu 112 do cechy...
sprawdzimy:
x = 1.5 = 3/2 = 2*3/4 = 2^1*(1/2 + 1/4)

16: 0|1+15|3 = 0|10000|110...
32: 0|1+127|3 = 0|10000000|110..., czyli tu wypełniamy zerami.
[W maszynie będzie tak: 0|10000000|10... najstarszy bit mantysy nie jest zapisywany w float i double - ma zawsze wartość 1]

x = 3/32 = 2^-3 * (1/2+1/4)
16: 0|-3 + 15|3 = 0|01100|110...
32: 0|-3 + 127|3 = 0|01111100|110... tu już nie wypełniamy zerami.

nie ma tu prostego wypełniania... trzeba dodawać 112:
10000 = 16 => 16 + 112 = 128 = 10000000
01100 = 12 => 12 + 112 = 124 = 01111100
ODPOWIEDZ