Програмирање 2/К1 2019

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Pitanja

Pitanje 1

Na nekom računaru, realni brojevi se predstavljaju na širini od 11 bita u formatu seeeeemmmmm, gde je s predznak broja, eeeee su 5 bitova za eksponent u kodu sa viškom 15 i mmmmm su 5 bitova normalizovane mantise sa skrivenim bitom (1≤M<2). Sva zaokruživanja se obavljaju prema pravilima ANSI/IEEE standarda za realne brojeve. Neka se u lokaciju A učita broj čija je vrednost 11.510, a u lokaciju B broj čija je vrednost najveća moguća tako da prilikom sabiranja brojeva A i B ne dođe do greške veće od 1 prilikom zaokruživanja. Kolika je vrednost zbira A i B na datom računaru?

Postavka

Ovo je malo teži zadatak. Traži se najveći broj B tako da kad se sabere sa A greška u zaokruživanju ne bude veća od 1.

Ovaj zadatak ćemo rešiti tako što predstavimo A, i povećavamo eksponent od normalizovanog dok ne dođemo do eksponenata dovoljno velikih da se mora desiti zaokruživanje. Onda računame pojedinačno grešku za svako zaokruživanje i biramo onu koja je manja od 1, a ima najveći eksponent. Onda osmislimo broj B tako što mantisu postavimo na sve jedinice (najveći broj) i damo taj eksponent koji smo našli.

  • w = 11, k = 5, v = 15, p = 5
  • IEEE mantisa

Broj A

A = 11.510 = 1011.12 = 1.01110 * 23

Tražimo najveći eksponent

Tražimo najveći eksponent na koji možemo da postavimo A, a da greška u zaokruživanju ne bude veća od 1.

A = 1.01110 * 23

A = 0.10111 0 * 24 - Nema greške

A = 0.01011 10 * 25 - Zaokružujemo tako što dodamo 1 na krajnju cifru mantise (Pravilo 3b)

Az5 = 0.011000 * 25. Greška = Az5 - A = (0.0110000 - 0.0101110)*25 = 0.0000010 * 25 = 0.1

Greška je manja od 1, znači možemo još.

A = 0.00101 110 * 26.

Zaokružuje se pravilom 2.

Az6 = 0.00110 * 26

Greška = Az6 - A = 0.00000010 * 26 = 0.1

Idemo dalje.

A = 0.00010 1110 * 27

Az = 0.00011 * 27 (Pravilo 2)

Greška = Az7 - A = (0.00011 0000 - 0.00010 1110) * 27 = 0.1

Idemo dalje...

A = 0.00001 01110 * 28

Az8 = 0.00001 (Pravilo 1).

Greška = Az8 - A = (0.00001 00000 - 0.00001 01110) * 28 = 100.1 = 8.510

Sa 8 smo ga preterali, tako da je 7 najveći eksponent koji možemo da uzmemo.

Pravimo broj B

Najveća mantisa je 11111, tako da broj B = 1.11111 * 27 = 1111 1100 = 25210.

Odatle A + B = 11.5 + 252 = 263.5 što je najbliže 264 (A). (Imajte u vidu da je A sabrano sa povećanim eksponentom sa greškom 0.12 tj 0.5 tako da je pravi zbir 12 + 252 = 264 tačno na računaru)

Pitanje 2

Na jednom računaru, realni brojevi se predstavljaju na širini od 11 bita u formatu seeeemmmmmm, gde je s bit predviđen za kodiranje predznaka broja, eeee su 4 bita za eksponent u kodu sa viškom 8, a mmmmmm su biti normalizovane matise sa skrivenim bitom (0.5≤M<1). Celi brojevi na ovom računaru se predstavljaju u drugom komplementu na širini od 7 bita. Vrednost realnog broja na lokaciji X je 32.510. Predstava celog broja na lokaciji Y je 1228. Koji je sadržaj realne promenljive Z nakon što se na ovom računaru obavi operacija Z = X + Y? Sva zaokruživanja se obavljaju prema pravilima ANSI/IEEE standarda za realne brojeve.

Postavka

  • w = 11, k = 4, v = 8, p = 6
  • VAX mantisa

Broj Y

Y = 1228 = 001 010 010 = 0101 0010.

Komplementiramo, Y = -10 1110 (-46).

Normalizujemo mantisu da bude u formatu 0.1mmmmmm.

Y = -011110 = -0.1011100 * 26. Nema zaokruživanja.

Broj X

X = 32.5 = 10 0000.1

Normalizujemo:

X = 10 0000.1 = 0.1000001 * 26

Sabiranje

Z = X + Y = 0.1000001 * 26 - 0.1011100 * 26 = -(0.1011100 * 26 - 0.1000001 * 26) = -0.0011011 * 26.

Normalizujemo.

Z = -0.1101100 * 24

Mantisa = 101100

Eksponent E = 4. e = E + v = 4 + 8 = 12 = 11002.

Znak je negativan.

Sastavljamo 1 1100 101100 = 0111 0010 1100 = 72C16 (A).