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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Нема описа измене
Ред 65: Ред 65:


=== 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. Jedino treba proveriti da li je (B) ili nijedan od ponuđenih odgovora. 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. у 15:05

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. Jedino treba proveriti da li je (B) ili nijedan od ponuđenih odgovora. 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.