Лабораторна робота №1
Розробка програм, що відображають внутрішнє представлення числових даних.
ЦІЛІ типи
_____________________________________________________
Shortint -128 .. 127 1 байт
Integer -32768 .. 32767 2 байта
Longint -2147483648 .. 2147483647 4 байта
Byte 0 .. 255 1 байт
Word 0 .. 65535 2 байта
__________________________________________________________
ДІЙСНІ типи кількість розрядів
мантиси
---------------------------------------------------------------
Real 2.9e-39 .. 1.7e+38 11 6 байт
Single 1.5e-45 .. 3.4e+38 7 4 байта
Double 5.0e-324 .. 1.7e+308 15 8 байт
Extended 3.4e-4932 .. 1.1e+4932 19 10 байт
Comp -9.2e+18 .. 9.2e+18 19 8 байт
---------------------------------------------------------------
Типи значень з плаваючою крапкою Real, Single, Double Extended і Comp (дійсний, з одинарною точністю, з подвійною точністю, з підвищеною точністю і складний) зберігаються у вигляді двійкового представлення знаку (+ або -), показника степеня і мантиси числа. Число, що представляється, має значення:
+/- значуща_частина (мантиса) Х 2^показник_степеня
де значуща частина числа є окремим бітом зліва від двійкової десяткової крапки (тобто 0 <= значуща частина <= 2).
У наступній далі схемі зліва розташовані старші значущі биті, а справа - молодші значущі биті. Найлівіше значення зберігається в самих старших адресах. Наприклад, для значення дійсного типу e зберігається в першому байті, f - в наступних п'яти байтах, а s - в старшому значущому біті останнього байта.
Дійсний тип
-----------------------------------------------------------------
Шестибайтове (48-бітове) дійсне число (Real) поділяється на три поля:
1 39 8
----T---------------T--------¬
¦ s ¦ f ¦ e ¦
L---+---------------+---------
msb lsb msb lsb
Значення v числа визначається за допомогою виразів:
if 0 < e <= 255, then v = (-1)^s * 2^(e-129)*(l.f).
if e = 0, then v = 0.
Дійсний тип не може використовуватися для зберігання ненормалізованих чисел, значень, що не є числом (NaN), а також нескінченно малих і нескінченно великих значень. Ненормалізоване число при збереженні його у вигляді дійсного приймає нульове значення, а не числа, нескінченне малі і нескінченно великі значення при спробі використовувати для їх запису формат дійсного числа приводять до помилки переповнювання.
Тут і далі msb означає більш значущий біт (старші розряди), lsb - менш значущий (молодші розряди).

Тип числа с одинарною точністю
-----------------------------------------------------------------
Чотирьохбайтове (32-бітове) число типу Single поділяється на три поля:
1 8 23
----T------T------------------¬
¦ s ¦ e ¦ f ¦
L---+------+-------------------
msb lsb msb lsb
Значення v числа визначається за допомогою виразів:
if 0 < e < 255, then v = (-1)^s * 2^(e-127) * (l.f).
if e = 0 and f <> 0, then v = (-1)^s * 2^(126) * (o.f).
if e = 0 and f = 0, then v = (-1)^s * O.
if e = 255 and f = 0, then v = (-1)^s * Inf.
if e = 255 and f <> 0, then v = NaN.
Тип числа с подвійною точністю
-----------------------------------------------------------------
Восьмибайтове (64-бітове) число типу Double поділяється на три поля:
1 11 52
----T------T-------..--------¬
¦ s ¦ e ¦ f ¦
L---+------+-------..---------
msb lsb msb lsb
Значення v числа визначається за допомогою виразів:
if 0 < e < 2047, then v = (-1)^s * 2^(e-1023) * (l.f).
if e = 0 and f <> 0, then v = (-1)^s * 2^(1022) * (o.f).
if e = 0 and f = 0, then v = (-1)^s * O.
if e = 2047 and f = 0, then v = (-1)^s * Inf.
if e = 2047 and f <> 0, then v = NaN.
Тип числа с підвищеною точністю
-----------------------------------------------------------------
Десятибайтове (80-бітове) число типу Extended поділяється на чотири поля:
1 15 1 63
----T--------T---T--------..-------¬
¦ s ¦ e ¦ i ¦ f ¦
L---+--------+---+--------..--------
msb lsb msb lsb
Значення v числа визначається за допомогою виразів:
if 0 < e < 32767, then v = (-1)^s * 2^(e-16383) * (l.f).
if e = 32767 and f = 0, then v = (-1)^s * Inf.
if e = 32767 and f <> 0, then v = NaN.

Складний тип
-----------------------------------------------------------------
Восьмибайтове (64-бітове) число складного типу (Comp) поділяється на два поля:
1 63
----T-----------..--------------¬
¦ s ¦ d ¦
L---+-----------..---------------
msb lsb
Значення v числа визначається за допомогою виразів:
if s = 1 and d = 0, then v = NaN.
S – знак числа, d – доповняльний код.
в протилежному випадку v представляє собою 64-битове значення, що є доповненням до двійки.
Завдання
Дослідити представлення в пам’яті комп’ютера даних.
var i1 : Byte
i2 : Shortint;
i3 : Word;
i4 : Integer;
i5 : Longint;
r1 : Real;
r2 : Single;
r3 : Double;
r4 : Extended;
r5 : Comp;
Тестування провести для наступних значень змінних:
i1 – день народження;
i2 := -i1;
i3 := i1*125;
i4 := -i3;
i5 := -i3;
r1– дробове число: ціла частина – місяць народження, дробова частина - рік народження;
r2 := r1*125;
r3 := -r2;
r4 := r2;
r5 := i5;
{ Наприклад, якщо дата народження 21.10.1982, то:
i1 := 21; i2 := -21; i3 := 2625; i4 := 2625; i5 := -2625;
r1 := 10.1982; r2 := 1274.775; r3 := -1274.775; r4:= 1274.775; r5 := -2625; }