PDA

View Full Version : "Представяне на числа с плаваща и фиксирана точка"



01-22-2007, 14:11
Какво може да ми кажете по въпроса - интересуват ме само най-важните работи;

Мерси!

ted_ka
02-01-2007, 18:52
Клетките в ОП са номерирани от 0 нагоре. Наричат се адреси на паметта. Ако паметта има K клетки, то необходими са L бита, като 2L > K, за да се адресират всички клетки. Тъй като в една операция участват много клетки (данни), то в командата за адресиране на тези данни ще има много битове. Поради това се използват методи за кодиране на адреса на данните в минимален брой битове. Кодирането е известно като представяне на данните. То е общовалидно за всички КС.
Съществуват различни бройни системи за представяне на числата, най-често използваните от които са: двоична (0,1), осмична (0 – 7), десетична(0 – 9), шеснайсетична (0 – 9; A – F). Числата от една бройна система могат да се превръщат в друга:

0000(2) = 0(8) = 0(10) = 0(16) 1000(2) = 10(8) = 8(10) = 8(16)
0001(2) = 1(8) = 1(10) = 1(16) 1001(2) = 11(8) = 9(10) = 9(16)
0010(2) = 2(8) = 2(10) = 2(16) 1010(2) = 12(8) = 10(10) = A(16)
0011(2) = 3(8) = 3(10) = 3(16) 1011(2) = 13(8) = 11(10) = B(16)
0100(2) = 4(8) = 4(10) = 4(16) 1100(2) = 14(8) = 12(10) = C(16)
0101(2) = 5(8) = 5(10) = 5(16) 1101(2) = 15(8) = 13(10) = D(16)
0110(2) = 6(8) = 6(10) = 6(16) 1110(2) = 16(8) = 14(10) = E(16)
0111(2) = 7(8) = 7(10) = 7(16) 1111(2) = 17(8) = 15(10) = F(16)

Представяне на числата.

1. Представяне на цели числа:
Широко използвани са няколко вида представяне
на двоичните числа:
Прав код - представят се като цели числа, като
най-левия бит е знаков (0-положително, 1-отрицателно), нулата има две представяния.
Обратен код- отново най-старшия бит е знаков. Намирането на отрицателно число става чрез инвертиране на двоичното представяне на модула на това число. Нулата отново има две представяния.
Допълнителен код- отново първият бит е знаков. Намирането на отрицателно число става чрез инвертиране (като при обратния) на двоичното представяне на модула на това число и добавяне на единица. Нулата има единствено представяне.
2. Представяне на реални числа:
Има няколко вида представяния за реалните числа:
Фиксирана точка- приема се че десетичната точка е фиксирана на определено място. Програмистът сам трябва да управлява мястото на десетичната точка при извършване на операция. Което налага при извършване на операция едно от двете числа да се измести в ляво или дясно, за да се подравни мястото на десетичната точка. И полученият резултат също трябва да се измести вляво или дясно спрямо необходимата точност. Днес тази процедура стандартно се извършва от компилаторите.
Плаваща точка- Всяко реално число х може да се представи като: х=mpe (m,e -цели), m се нарича мантиса а е-порядък. Това представяне на реални числа не е единствено. Ако за мантисата m е изпълнено 1/2<=m<1, то числото е нормализирано и неговото представяне е единствено. За различните КС дължината (в битове) на мантисата и порядъка варират. Обикновено КС имат специални регистри за обработка на числа с плаваща точка и обикновено тези регистри са 64 битови.
Често в литературата за визуализация на двоично представяне се използва шестнадесетичното. При него всяка четворка битове се представя чрез една шестнадесетична цифра. Формирането на четворките започва от дясно наляво.
3. Представяне на логически стойности:
Кодират се с 0 - лъжа и 1 - истина. Някои компилатори считат всичко, което има стойност, различна от 0 за истина.
4. Представяне на символи:
Всеки символ има някакво графично, визуално представяне. Всички символи се кодират с еднакви по дължина кодове. Съответствието, показващо на кой графичен символ кой двоичен набор е съпоставен, се нарича кодова таблица. Таки¬ва кодови таблици са ASCII- 8 битово представяне, EBCDIC- на IBM, BDS и новото 16 битово представяне Unicode. В България има 2-3 стандарта за представяне на кирилските букви. От гледна точка на хомоге¬ни¬за¬ция на данните е взето общо международно решение (ISO), което специфицира пред¬ставянето на символите. Повечето страни обаче определят свои модификации на стандарта, покриващи необходимостите им за представяне на символите от азбуката на местния език.
5. Представяне на низове от символи:
Използват се три подхода за представяне на низове от символи(НС):







фиг. Щ Представяне на низове от символи

При първият края на всеки НС се маркира със специален маркер(обикновено двоична нула). При вторият подход съдържанието на низа от символи се предхожда от поле, показващо размера. При третият подход се организира списъчна структура на клетки от паметта, съдържащи отделните символи на низа. Обикновено представянето на НС е задача на транслаторите на езиците от по-високо ниво. Критерий за предпочитане на едно или друго представяне е цената за обработка (времето). Например, ако софтуерът представлява редакторска система с много голяма динамика в изменение на съдържанието на текстовете, за предпочитане е третия подход: ефективен за редакторски операции като вмъкване, изтриване, дублиране. Ако една от масовите задачи е търсене в текст на комбинация от символи, то за предпочитане е първият подход.
6. Представяне на масиви:
Използват се два метода за представяния на масиви: линеен(дескрипторен) и чрез метода на маргиналното индексиране.
1. Линеен(дескрипторен) метод. Нека имаме двумерен масив(фиг. 11). В ОП за този масив се създава едно поле от последователни клетки, в ко¬ито се разполагат елементите на масива, обик¬но¬вено предшествано от едно описание (дескриптор на самия масив(фиг. й).
фиг. й. Линеен(дескрипторен) метод за представяне на двумерен масив. M0-адреса на началото на масива. N-дименсията на масива. N1..Nк-размерността по всяка дименсия. C0..Cm- константи /...мда, ако някои разбере кви са тес константи да се обади.../
Ако масива е три мерен(l мерен), то след представянето на първата страница, започва представянето на втората и т.н. до l-та страница(ако е 4-ри мерен след представянето на 1-ия куб, започва 2-рия и т.н. до последния).
При представяне на масиви, съществено е скоростта на достъп до елемент на ма¬си¬ва, т.е. броят операции за достъп до елемента aij. Формулата, по която се изчислява адре¬са на aij е:
&(aij)=&(M[i,j])=&(M[0,0]) + (i-1).n.d + (j-1).d
, където n е броят на елементите в ред а d е броят байтове, необходими за пред¬ста¬вяне на елемент от масива(& означава \'адреса на\'). Когато една програма се обръща за четене/запис в клетка M[i,j], компилатора ще замени това обръщение с поредица от няколко машини команди, необходими за изчисляването на адреса по горната формула. Някои алгоритмични езици като C/C++, Pascal обикновено в дескрипторната част съхраняват определени константи като n.d от горния израз, като по този начин съкращават с няколко машинни команди операцията достъп до елемент на масива.
2. Метода на маргиналното адресиране. Нека имаме тримерният масив(фиг.13)













фиг. “Голямата Фи”. Метода на маргиналното индексиране за представяне на масив. а) Три мерен масив б) Маргиналното му представяне като списък от указатели. Указателят а1xx сочи към елементите на масива, които имат първи индекс 1-ца (т.е. от първата страница). Указателя а12x сочи към ел. с фиксиран първи и втори индекс на 1-ца и 2-ка и т.н.
При този метод всеки ред от страницата на масива се записва като компактна(нераз¬делна) част. Но различните редове могат да бъдат разположени на различни места в ОП. Използва се списък от указатели, съдържащи началото на първия, втория и т.н. ред. Списъците се групират. Списък за първата, втората и т.н. страница. Създава се списък от списъци, ако масива има размерност k то ще има k-1 списъка от списъци. /новото, явно много по-практично наименование на дървото е “списък от списъци”!/

ted_ka
02-01-2007, 18:54
Клетките в ОП са номерирани от 0 нагоре. Наричат се адреси на паметта. Ако паметта има K клетки, то необходими са L бита, като 2L > K, за да се адресират всички клетки. Тъй като в една операция участват много клетки (данни), то в командата за адресиране на тези данни ще има много битове. Поради това се използват методи за кодиране на адреса на данните в минимален брой битове. Кодирането е известно като представяне на данните. То е общовалидно за всички КС.
Съществуват различни бройни системи за представяне на числата, най-често използваните от които са: двоична (0,1), осмична (0 – 7), десетична(0 – 9), шеснайсетична (0 – 9; A – F). Числата от една бройна система могат да се превръщат в друга:

0000(2) = 0(8) = 0(10) = 0(16) 1000(2) = 10(8) = 8(10) = 8(16)
0001(2) = 1(8) = 1(10) = 1(16) 1001(2) = 11(8) = 9(10) = 9(16)
0010(2) = 2(8) = 2(10) = 2(16) 1010(2) = 12(8) = 10(10) = A(16)
0011(2) = 3(8) = 3(10) = 3(16) 1011(2) = 13(8) = 11(10) = B(16)
0100(2) = 4(8) = 4(10) = 4(16) 1100(2) = 14(8) = 12(10) = C(16)
0101(2) = 5(8) = 5(10) = 5(16) 1101(2) = 15(8) = 13(10) = D(16)
0110(2) = 6(8) = 6(10) = 6(16) 1110(2) = 16(8) = 14(10) = E(16)
0111(2) = 7(8) = 7(10) = 7(16) 1111(2) = 17(8) = 15(10) = F(16)

Представяне на числата.

1. Представяне на цели числа:
Широко използвани са няколко вида представяне
на двоичните числа:
Прав код - представят се като цели числа, като
най-левия бит е знаков (0-положително, 1-отрицателно), нулата има две представяния.
Обратен код- отново най-старшия бит е знаков. Намирането на отрицателно число става чрез инвертиране на двоичното представяне на модула на това число. Нулата отново има две представяния.
Допълнителен код- отново първият бит е знаков. Намирането на отрицателно число става чрез инвертиране (като при обратния) на двоичното представяне на модула на това число и добавяне на единица. Нулата има единствено представяне.
2. Представяне на реални числа:
Има няколко вида представяния за реалните числа:
Фиксирана точка- приема се че десетичната точка е фиксирана на определено място. Програмистът сам трябва да управлява мястото на десетичната точка при извършване на операция. Което налага при извършване на операция едно от двете числа да се измести в ляво или дясно, за да се подравни мястото на десетичната точка. И полученият резултат също трябва да се измести вляво или дясно спрямо необходимата точност. Днес тази процедура стандартно се извършва от компилаторите.
Плаваща точка- Всяко реално число х може да се представи като: х=mpe (m,e -цели), m се нарича мантиса а е-порядък. Това представяне на реални числа не е единствено. Ако за мантисата m е изпълнено 1/2<=m<1, то числото е нормализирано и неговото представяне е единствено. За различните КС дължината (в битове) на мантисата и порядъка варират. Обикновено КС имат специални регистри за обработка на числа с плаваща точка и обикновено тези регистри са 64 битови.
Често в литературата за визуализация на двоично представяне се използва шестнадесетичното. При него всяка четворка битове се представя чрез една шестнадесетична цифра. Формирането на четворките започва от дясно наляво.
3. Представяне на логически стойности:
Кодират се с 0 - лъжа и 1 - истина. Някои компилатори считат всичко, което има стойност, различна от 0 за истина.
4. Представяне на символи:
Всеки символ има някакво графично, визуално представяне. Всички символи се кодират с еднакви по дължина кодове. Съответствието, показващо на кой графичен символ кой двоичен набор е съпоставен, се нарича кодова таблица. Таки¬ва кодови таблици са ASCII- 8 битово представяне, EBCDIC- на IBM, BDS и новото 16 битово представяне Unicode. В България има 2-3 стандарта за представяне на кирилските букви. От гледна точка на хомоге¬ни¬за¬ция на данните е взето общо международно решение (ISO), което специфицира пред¬ставянето на символите. Повечето страни обаче определят свои модификации на стандарта, покриващи необходимостите им за представяне на символите от азбуката на местния език.
5. Представяне на низове от символи:
Използват се три подхода за представяне на низове от символи(НС):







фиг. Щ Представяне на низове от символи

При първият края на всеки НС се маркира със специален маркер(обикновено двоична нула). При вторият подход съдържанието на низа от символи се предхожда от поле, показващо размера. При третият подход се организира списъчна структура на клетки от паметта, съдържащи отделните символи на низа. Обикновено представянето на НС е задача на транслаторите на езиците от по-високо ниво. Критерий за предпочитане на едно или друго представяне е цената за обработка (времето). Например, ако софтуерът представлява редакторска система с много голяма динамика в изменение на съдържанието на текстовете, за предпочитане е третия подход: ефективен за редакторски операции като вмъкване, изтриване, дублиране. Ако една от масовите задачи е търсене в текст на комбинация от символи, то за предпочитане е първият подход.
6. Представяне на масиви:
Използват се два метода за представяния на масиви: линеен(дескрипторен) и чрез метода на маргиналното индексиране.
1. Линеен(дескрипторен) метод. Нека имаме двумерен масив(фиг. 11). В ОП за този масив се създава едно поле от последователни клетки, в ко¬ито се разполагат елементите на масива, обик¬но¬вено предшествано от едно описание (дескриптор на самия масив(фиг. й).
фиг. й. Линеен(дескрипторен) метод за представяне на двумерен масив. M0-адреса на началото на масива. N-дименсията на масива. N1..Nк-размерността по всяка дименсия. C0..Cm- константи /...мда, ако някои разбере кви са тес константи да се обади.../
Ако масива е три мерен(l мерен), то след представянето на първата страница, започва представянето на втората и т.н. до l-та страница(ако е 4-ри мерен след представянето на 1-ия куб, започва 2-рия и т.н. до последния).
При представяне на масиви, съществено е скоростта на достъп до елемент на ма¬си¬ва, т.е. броят операции за достъп до елемента aij. Формулата, по която се изчислява адре¬са на aij е:
&(aij)=&(M[i,j])=&(M[0,0]) + (i-1).n.d + (j-1).d
, където n е броят на елементите в ред а d е броят байтове, необходими за пред¬ста¬вяне на елемент от масива(& означава \'адреса на\'). Когато една програма се обръща за четене/запис в клетка M[i,j], компилатора ще замени това обръщение с поредица от няколко машини команди, необходими за изчисляването на адреса по горната формула. Някои алгоритмични езици като C/C++, Pascal обикновено в дескрипторната част съхраняват определени константи като n.d от горния израз, като по този начин съкращават с няколко машинни команди операцията достъп до елемент на масива.
2. Метода на маргиналното адресиране. Нека имаме тримерният масив(фиг.13)













фиг. “Голямата Фи”. Метода на маргиналното индексиране за представяне на масив. а) Три мерен масив б) Маргиналното му представяне като списък от указатели. Указателят а1xx сочи към елементите на масива, които имат първи индекс 1-ца (т.е. от първата страница). Указателя а12x сочи към ел. с фиксиран първи и втори индекс на 1-ца и 2-ка и т.н.
При този метод всеки ред от страницата на масива се записва като компактна(нераз¬делна) част. Но различните редове могат да бъдат разположени на различни места в ОП. Използва се списък от указатели, съдържащи началото на първия, втория и т.н. ред. Списъците се групират. Списък за първата, втората и т.н. страница. Създава се списък от списъци, ако масива има размерност k то ще има k-1 списъка от списъци. /новото, явно много по-практично наименование на дървото е “списък от списъци”!/