1

Тема: Дробові числа. Частина 1

Щось сьогодні з'явилось  бажання написати про комп'ютерне представлення дробових чисел, а точніше числа з плавучою комою.
Напевно тут всі знають що зараз в 99.9% процесорів і мікроконтролерів зберігають такі числа згідно стандарту IEEE 754. Перша версія стандарту була випущена в далекому 1985 р. і визначала 4 основних типи: числа одинарної точності, подвійної точності, розширене число одинарної точності (використовується дуже і дуже рідко) і розширені подвійної точності.
Вони використовують 32, 64, >43 і >79 біти відповідно.

Загальний формат такого числа
http://www.softelectro.ru/ieee754_1.gif

Для різних чисел розмір E І M є різним зокрема:
Для чисел одинарної точності: E = 8 біт M = 23;
Для чисел подвійної точності: E = 11 біт M = 52;
Для чисел розширеної одинарної точності: E = ≤11 біт M = решта;
Для чисел розширеної одинарної точності: E = 15 біт M = решта;

Перетворення виконується за наступним алгоритмом:
1. Перетворити в двійкову систему число.
2. Привести число до нормалізованого вигляду (це коли мантиса в межах від 1 до основи системи, тобто в даному випадку 2) ,для малих можна і до ненормалізованого).
3. Визначити зміщену експоненту*.
*Для того щоб не вводити ще один біт знаку для експоненти її просто зміщують на 2^(n-1)-1, де n - кількість біт на експоненту.
Для прикладу число 12,25 буде виглядати так:
1. 12,25d = 1100,01b
2. 1100,01b = 1,10001b * exp^(11b)
3. E = 127d + 3d = 130d = 10000010b
Тобто це число буде виглядати так :
0100 0001 0100 0100 0000 0000 0000 0000 = 0x41440000
До речі, забув сказити, в мантису записуються тільки числа після коми.
Перетворити назад можна за формулою:

Прихований текст
http://www.softelectro.ru/ieee754_f2.gif

, де E - значення експоненти,
b - кількість біт на експоненту
n - кількість біт на мантису

Але тут виникає кілька проблем, зокрема неможливо зобразити нуль. Тому для деяких чисел були введені спеціальні значення зокрема

Позитивний нуль
http://www.softelectro.ru/ieee754_4.gif
Негативний нуль
http://www.softelectro.ru/ieee754_5.gif
Плюс нескінченність
http://www.softelectro.ru/ieee754_6.gif
Мінус нескінченність
http://www.softelectro.ru/ieee754_7.gif
Nan(Not a Number)
http://www.softelectro.ru/ieee754_8.gif

Також для більш малі числа можна зберігати в денормалізованій формі. Для цього в експоненті мають бути всі нулі

Денормалізована форма
http://www.softelectro.ru/ieee754_9.gif

P.S. Вибачте за можливі помилки і можливо неправильні деякі терміни.
P.P.S В другій частині напишу про проблеми такого представлення.

Нехай буде з тобою сила!

Re: Дробові числа. Частина 1

всі знають що зараз в 99.9% процесорів і мікроконтролерів зберігають такі числа згідно стандарту IEEE 754

Я вимираючий вид, бо я цього не знав.

3

Re: Дробові числа. Частина 1

Дякую, я зараз розробляю віртуальну машину і якраз підійшов до цього питання.
Маю питаннячко до вас трішки не за темою:
Моя ВМ стекова за архітектурою і має 2 32-бітних стеки - стек викликів і стек даних (цілі числа та адреса). На вашу думку, чи варто створювати окремий стек для дійсних числел?

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: leofun011

4

Re: Дробові числа. Частина 1

0xDADA11C7 написав:

Дякую, я зараз розробляю віртуальну машину і якраз підійшов до цього питання.
Маю питаннячко до вас трішки не за темою:
Моя ВМ стекова за архітектурою і має 2 32-бітних стеки - стек викликів і стек даних (цілі числа та адреса). На вашу думку, чи варто створювати окремий стек для дійсних числел?

Як на мене, це має сенс тільки якщо стек для дійсних чисел буде мати більшу розрядінсть(64 чи навідь 128 біти).

Нехай буде з тобою сила!
Подякували: 0xDADA11C7, leofun012