Програмирање 2/К1П 2019 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Нема описа измене
Нема описа измене
Ред 64: Ред 64:
'''0011 1011 1000 = 3B8'''.
'''0011 1011 1000 = 3B8'''.


== 4. pitanje ==
=== 4. pitanje ===
Ova pitalica se reši na pogled. Funkcija printf nikad neće vratiti string ako joj je dat formatski specifikator %d. Nazivi enumova postoje samo u kodu i gube se tokom kompilacije, tako da je jedino smisleno rešenje (B) 3 91.
Ova pitalica se reši na pogled. Funkcija printf nikad neće vratiti string ako joj je dat formatski specifikator %d. Nazivi enumova postoje samo u kodu i gube se tokom kompilacije, tako da je jedino smisleno rešenje (B) 3 91.

Верзија на датум 13. фебруар 2020. у 00:09

Pitanja

1. pitanje

Na nekom računaru, realni brojevi se predstavljaju na širini od 10 bita u formatu seeeemmmmm, gde je s predznak broja, eeee su bitovi eksponenta u kodu sa viškom 7 i mmmmm su biti normalizovane mantise sa skrivenim bitom (1≤M<2). Celi brojevi se predstavljaju na širini od 8 bita u komplementu dvojke. Neka se u celobrojnoj lokaciji A nalazi broj čija je predstava 8216, dok se u realnoj lokaciji B nalazi broj čija je vrednost 13.2510. Kako na datom računaru izgleda predstava broja koji je rezultat operacije A + B? Sva zaokruživanja se obavljaju prema pravilima ANSI/IEEE standarda za realne brojeve.

Postavka

Treba sabrati dva realna broja. Za početak pretvorimo ono što nam je dato u realne brojeve po formatu.

  • Broj biti eksponenta je k = 4
  • Višak (IEEE) je v = 24-1-1 = 7
  • Broj biti mantise je p = 5
  • Mantisa je IEEE formata 1.xxxxx

Broj A

8 bita, komplement 2, dakle poslednji bit određuje znak. A = 8216 = 1000 0010. Broj je očigledno negativan. Komplementiramo da izvučemo vrednost. A = - 111 1110 = -126.

Treba normalizovati ovaj broj da bi stao u format mantise. 111 1110 => 1.11 1110. Pomeranjem ulevo za 6 mesta dobijamo broj Af = - 1.111110 * 26. Eksponent E = 6. Podvlačimo mantisu: MA = 11111. Ovde nije bilo zaokruživanja (pravilo 1). Tako da je broj u zapisu -1.11111 * 26.

Broj B

B = 13.25. Pretvaramo odvojeno celi i decimalni deo. 1310 = 11012 0.2510 = 0.012 Spojimo i dobijemo 1101.01. Normalizujemo tako da stane u format mantise pomeranjem zareza ulevo. 1.10101 * 23. Eksponent je E = 3. Broj Bf = 1.10101 * 23.

Sabiranje

Broj B se dovodi na veći eksponent, pri tome se zaokružuje mantisa (pravilo 2). Bf = 1.10101 * 23 = 0.00110101 * 26 = 0.00111 * 26.

Očekujemo negativan broj jer je |A|>|B|. Oduzimamo realne binarne brojeve: Af + Bf = 0.00111 * 2 6 - 1.11111 * 26 = -(1.11111 * 26 - 0.00111 * 2 6) = - 1.11000 * 26.

Reprezentacija

Naš broj je - 1.11000 * 26. Konvertujemo ga u predstavu formata:

s eeee mmmmm

Znak je - pa je bit s 1.

1 eeee mmmmm

Eksponentu dodajemo pomeraj (višak). e = E + v = 6 + 7 = 13 = 11012.

1 1101 mmmmm

Mantisu prepišemo

1 1101 11000

Pretvorimo u hex broj:

0011 1011 1000 = 3B8.

4. pitanje

Ova pitalica se reši na pogled. Funkcija printf nikad neće vratiti string ako joj je dat formatski specifikator %d. Nazivi enumova postoje samo u kodu i gube se tokom kompilacije, tako da je jedino smisleno rešenje (B) 3 91.