Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Дійсні типи даних

Дійсні константи записуються у двох формах – з фіксованою десятковою крапкою або в експонентному виді. В першому випадку крапка використовується для поділу цілої і дробової частин константи. Як ціла, так і дробова частини можуть бути відсутніми (наприклад 1.2, 0.725, 1.,.35, 0.). В трьох останніх випадках відсутня або дробова, або ціла частина. Десяткова крапка повинна обов'язково бути присутньою, інакше константа буде вважатись цілою.

Експонентна форма запису дійсної константи містить знак, мантису і десятковий порядок (експоненту). Мантиса – це будь-яка додатня дійсна константа у формі з фіксованою крапкою або цілою константою. Порядок вказує степінь числа 10, на яку домножується мантиса. Порядок відокремлюється від мантиси буквою 'E' або 'e' (від слова exponent). Порядок може мати знак плюс або мінус, у випадку додатнього порядку знак плюс можна опускати. Наприклад:

1.5e+6 - константа еквівалентна 1500000.0

1e-4 - константа еквівалентна 0.0001

-.75E3 - константа еквівалентна -750.0

У мові С++ дійсні типи або типи з рухомою комою представляються трьома розмірами, що характеризують точність представлення дійсних чисел:

float – одиничної точності;

double - подвійної точності;

long double – розширеної точності (у деяких реалізаціях тип long double може бути відсутній)

Константи з рухомою комою мають за замовчуванням тип double. Саме він є найбільш природнім для комп'ютера. У програмуванні треба по можливості уникати типу float, тому що його точність недостатня, а процесор однаково при виконанні операцій перетворить його в тип double. Один з випадків, де застосування типу float виправдане – тривимірна комп'ютерна графіка.

Можна явно вказати тип константи за допомогою суфіксів F, f (float) і L, l (long). Наприклад, константа 2E+6L буде мати тип long double.

В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8 – під порядок, 23 – під мантису.

Розряди мантиси включають один розряд цілої частини, що завжди дорівнює одиниці, і фіксовану кількість розрядів дробової частини. Оскільки старший двійковий розряд мантиси завжди дорівнює одиниці, зберігати його необов'язково, і у двійковому коді він відсутній. Фактично двійковий код зберігає тільки розряди дробової частини мантиси. Отже, насправді, у типу float мантиса містить 24 розряди, але старший розряд завжди дорівнює одиниці, тому зберігати його не потрібно.

Тип double займає 8 байт, у яких один розряд виділяється під знак, 11 – під порядок, 52 – під мантису. Насправді в мантисі 53 розряди, але старший завжди дорівнює одиниці і тому не зберігається.

Тип long double займає 10 байт (або 8 байт), в яких один розряд виділяється під знак, 15 – під порядок, інші 64 – під мантису. Записуються всі 64 розряди мантиси разом зі старшою одиницею.

Оскільки порядок може бути додатній і від'ємний, у двійковому коді він зберігається в зміщеному виді: до нього додається константа, яка рівна абсолютній величині максимального по модулю від'ємного порядку. У випадку типу float вона дорівнює 127, у випадку double – 1023, long double – 16383. Таким чином, максимальний по модулю від'ємний порядок представляється нульовим кодом.

Дійсні числа зберігаються в пам'яті комп'ютера у зворотньому порядку розміщення байт числа.

Таблиця 4.7

Назва типу Іденти-фікатор Діапазон значень Внутрішній формат: s–знак,e–експонента,m–мантиса Значення числа Розмір пам’яті в байтах
Дійсне одинарної точності float від 3.410-38 до 3.41038 1 біт 8 біт 23 біта
s e   m  

 

(-1)S1,m2e -127  
Дійсне подвійної точності double від 1.710-308 до 1.710308 1 біт 11 біт 52 біта
s e   m  

 

(-1)S1,m2e –1023  
Дійсне підвищеної точності long double від 3.410-4932 до 3.4104932 1 біт 15 біт 1біт 63 біта
s e     m  

 

(-1)S1,m2e -16383 10 (8)*

 

* Розмір типу long double для різних компіляторів може відрізнятися, наприклад для BCB 6.0 буде займати 10 байт, для VC++ 6.0 буде займати 8 байт (в цьому випадку формат збереження типу long double співпадає з форматом типу double).

Приклад 5.

Розглянемо, як в пам'яті комп’ютера зберігається додатнє число 649,1989 типу float.

Перевід цілої частини:

=> 649 10 = 289 16

Перевід дробової частини:

0, 1989 * 16 = 3,1824 0, 1824 * 16 = 2,9184 0, 9184 * 16 = 14,6944 (1410 = E 16) 0, 6944 * 16 = 11,1104 (1110 = B 16)     => 0,1989 10 = 0,32EB 16

 

Отже: 649,1989 10 = 289,32EB 16 = 0010 1000 1001, 0011 0010 1110 1011 2

 

 

Нормалізація: 001, 0 1000 1001 0011 0010 1110 1011 2 * 101001

 

Заокруглення:

1, 0 1000 1001 0011 0010 1110 10│11

+ 1

1, 0 1000 1001 0011 0010 1110 11

 

Визначення мантиси: m=0 1000 1001 0011 0010 1110 11

Визначення зміщеного порядку: е = 12710 + 910 = 136 10 = 88 16 = 1000 1000 2

 

Інший спосіб: 12710 = 111 1111 2

+ 1001

1000 1000 2

Визначення знакового розряду: s=0 (бо число додатнє).

Схема внутрішнього представлення:

s e m
1 біт 8 біт 23 біт

Зборка за схемою:

s e m
  1000 1000 0 1000 1001 0011 0010 1110 11

 

В 16- ковій системі числення: 0100 0100 0010 0010 0100 1100 1011 1011 2= 44 22 4С BB 16

 

В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:

1011 1011 0100 1100 0010 0010 0100 0100

 

Результат в 16- ковій системі числення: BB 4С 22 44

Приклад 6.

Розглянемо, як в пам'яті комп’ютера зберігається від'ємне число – 649,1989 типу float.

Різниця з попереднім прикладом буде полягати тільки у представленні знакового розряду.

Визначення знакового розряду: s=1 (бо число від'ємне).

Зборка за схемою (відміну від попереднього прикладу будемо виділяти жирним шріфтом):

 

s e m
  1000 1000 0 1000 1001 0011 0010 1110 11

 

В 16- ковій системі числення: 1 100 0100 0010 0010 0100 1100 1011 10112 = С 4 22 4С BB 16

 

В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа:

 

1011 1011 0100 1100 0010 0010 1 100 0100

 

Результат в 16- ковій системі числення: BB 4С 22 С 4

<== предыдущая лекция | следующая лекция ==>
Цілочисельні типи даних | Вказівники
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 1059; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.