[+] System zmiennopozycyjny

Potrzebujesz pomocy z C, C++, perl, python, itp.
LuckyF
Posty: 34
Rejestracja: 09 lipca 2009, 13:30
Lokalizacja: kolo Lodzi

[+] System zmiennopozycyjny

Post autor: LuckyF »

Witam.
Mam zadanie:
Przedstaw liczbę x=-21,3 w słowie o długości d+1=16 bitów, o t=8 bitach mantysy 
Teraz moje pytanie brzmi w jaki sposób najłatwiej przekształcić tę liczbę i czy będzie to przekształcenie dokładne?
Sam doliczyłem się cechy 0000101 jednak nie potrafię doliczyć się mantysy. Proszę o pomoc, bo egzamin już w czwartek.

Z góry dziękuję.
AdeBe
Junior Member
Posty: 825
Rejestracja: 01 grudnia 2007, 14:41

Post autor: AdeBe »

LuckyF pisze:I czy będzie to przekształcenie dokładne?
Ułamki dziesiętne przeważnie nie dają się dokładnie przekształcić do postaci binarnej.

Poza tym: wg. jakiego systemu ta liczba jest reprezentowana? IEEE-754 czy jakiś inny wymyślony przez wykładowcę?
LuckyF
Posty: 34
Rejestracja: 09 lipca 2009, 13:30
Lokalizacja: kolo Lodzi

Post autor: LuckyF »

O tym według jakiego systemu, szczerze mówiąc, nie mam pojęcia. W wykładach o tym nic nie mam. Wiem natomiast, że liczbę 18,5 rozpisaną mam tak:

Obrazek

Może to pomoże. Mantysa jest z przedziału [0.5 , 1).
Ułamki dziesiętne przeważnie nie dają się dokładnie przekształcić do postaci binarnej.
Więc liczba ta wyniesie:
10000101.10100100?

Jeśli nie to prosiłbym o poprawienie mnie.

Edycja:
Trochę dokładniej:
u mnie x = (-1)^S * M * 2^C
a nie:
x = (-1^S) * 1.M * 2^C
AdeBe
Junior Member
Posty: 825
Rejestracja: 01 grudnia 2007, 14:41

Post autor: AdeBe »

Cechę wyliczyłeś dobrze, no to z mantysą też żaden problem.
mantysa = 21.3 / 32 = 0.665625
Kolejne bity mantysy oznaczają kolejne ułamki 2^(-x), czyli 1/2 (0.5), 1/4 (0.25), 1/8 (0.125), 1/16 (0.0625), 1/32 (0.03125), 1/64 (0.015625), 1/128 (0.0078125), 1/128 (0.00390625)
Przy obliczaniu sumujesz te ułamki tak, aby suma była jak najbliższa przedstawionej liczbie.
0.665625 ~= 0.5 + 0.125 + 0.03125 + 0.0078125 -- z lekkim niedomiarem.
Zapisujesz sobie jako 1 te bity, które weszły w skład sumy. Musisz tylko przy zapisie uważać czy najstarszy bit jest po lewej czy po prawej stronie.

Podejrzewam, że będziesz mógł mieć na egzaminie kalkulator, bo liczenie tego ręcznie to proszenie się o pomyłkę na 6 miejscu po przecinku.

Można to też liczyć na ułamkach zwykłych, tylko musisz wtedy zamienić podaną liczbę na taki przecinek - lepsze kalkulatory mogą wyświetlać liczby w postaci ułamków zwykłych.
Wtedy też od razu widać, czy liczba da się przedstawić dokładnie - mianownik musi być potęgą dwójki z zakresu od 2 do 2^(liczba_bitów_mantysy), czyli dla 8 bitów będą to 2,4,8,16,32,64,128,256.
LuckyF
Posty: 34
Rejestracja: 09 lipca 2009, 13:30
Lokalizacja: kolo Lodzi

Post autor: LuckyF »

Dziękuję za pomoc. Akurat nie miałem tego na egzaminie, ale zawsze się do czegoś przyda. Jeszcze raz dzięki.
ODPOWIEDZ