Програмирање 2/К1 2019
Први колоквијум 2019. године одржан је 18. марта. Задаци и решења су доступни са странице предмета.
Питања
Питање 1
На неком рачунару, реални бројеви се представљају на ширини од 11 бита у формату сеееееммммм, где је с предзнак броја, еееее су 5 битова за експонент у коду са вишком 15 и ммммм су 5 битова нормализоване мантисе са скривеним битом (1≤М<2). Сва заокруживања се обављају према правилима АНСИ/ИЕЕЕ стандарда за реалне бројеве. Нека се у локацију А учита број чија је вредност 11.510, а у локацију Б број чија је вредност највећа могућа тако да приликом сабирања бројева А и Б не дође до грешке веће од 1 приликом заокруживања. Колика је вредност збира А и Б на датом рачунару?
Поставка
Ово је мало тежи задатак. Тражи се највећи број Б тако да кад се сабере са А грешка у заокруживању не буде већа од 1.
Овај задатак ћемо решити тако што представимо А, и повећавамо експонент од нормализованог док не дођемо до експонената довољно великих да се мора десити заокруживање. Онда рачунаме појединачно грешку за свако заокруживање и бирамо ону која је мања од 1, а има највећи експонент. Онда осмислимо број Б тако што мантису поставимо на све јединице (највећи број) и дамо тај експонент који смо нашли.
- w = 11, к = 5, в = 15, п = 5
- ИЕЕЕ мантиса
Број А
А = 11.510 = 1011.12 = 1.01110 * 23
Тражимо највећи експонент
Тражимо највећи експонент на који можемо да поставимо А, а да грешка у заокруживању не буде већа од 1.
А = 1.01110 * 23
А = 0.10111 0 * 24 - Нема грешке
А = 0.01011 10 * 25 - Заокружујемо тако што додамо 1 на крајњу цифру мантисе (Правило 3б)
Аз5 = 0.011000 * 25. Грешка = Аз5 - А = (0.0110000 - 0.0101110)*25 = 0.0000010 * 25 = 0.1
Грешка је мања од 1, значи можемо још.
А = 0.00101 110 * 26.
Заокружује се правилом 2.
Аз6 = 0.00110 * 26
Грешка = Аз6 - А = 0.00000010 * 26 = 0.1
Идемо даље.
А = 0.00010 1110 * 27
Аз = 0.00011 * 27 (Правило 2)
Грешка = Аз7 - А = (0.00011 0000 - 0.00010 1110) * 27 = 0.1
Идемо даље...
А = 0.00001 01110 * 28
Аз8 = 0.00001 (Правило 1).
Грешка = Аз8 - А = (0.00001 00000 - 0.00001 01110) * 28 = 100.1 = 8.510
Са 8 смо га претерали, тако да је 7 највећи експонент који можемо да узмемо.
Правимо број Б
Највећа мантиса је 11111, тако да број Б = 1.11111 * 27 = 1111 1100 = 25210.
Одатле А + Б = 11.5 + 252 = 263.5 што је најближе 264 (А). (Имајте у виду да је А сабрано са повећаним експонентом са грешком 0.12 тј 0.5 тако да је прави збир 12 + 252 = 264 тачно на рачунару)
Питање 2
На једном рачунару, реални бројеви се представљају на ширини од 11 бита у формату сеееемммммм, где је с бит предвиђен за кодирање предзнака броја, ееее су 4 бита за експонент у коду са вишком 8, а мммммм су бити нормализоване матисе са скривеним битом (0.5≤М<1). Цели бројеви на овом рачунару се представљају у другом комплементу на ширини од 7 бита. Вредност реалног броја на локацији X је 32.510. Представа целог броја на локацији Y је 1228. Који је садржај реалне променљиве З након што се на овом рачунару обави операција З = X + Y? Сва заокруживања се обављају према правилима АНСИ/ИЕЕЕ стандарда за реалне бројеве.
Поставка
- w = 11, к = 4, в = 8, п = 6
- ВАX мантиса
Број Y
Y = 1228 = 001 010 010 = 0101 0010.
Комплементирамо, Y = -10 1110 (-46).
Нормализујемо мантису да буде у формату 0.1мммммм.
Y = -011110 = -0.1011100 * 26. Нема заокруживања.
Број X
X = 32.5 = 10 0000.1
Нормализујемо:
X = 10 0000.1 = 0.1000001 * 26
Сабирање
З = X + Y = 0.1000001 * 26 - 0.1011100 * 26 = -(0.1011100 * 26 - 0.1000001 * 26) = -0.0011011 * 26.
Нормализујемо.
З = -0.1101100 * 24
Мантиса = 101100
Експонент Е = 4. е = Е + в = 4 + 8 = 12 = 11002.
Знак је негативан.
Састављамо 1 1100 101100 = 0111 0010 1100 = 72Ц16 (А).