Домашнее задание:
§29, §30
Хранение в памяти вещественных чисел
Хранение вещественных чисел
С фиксированной запятой ( в первых ЭВМ ):
целая часть
дробная часть
0,000000000000012345
123450000000000000,0
для больших и маленьких чисел нужно масштабирование
С плавающей запятой (автоматическое масштабирование):
А = ± Z•B p
1,2345·10 -14
1,2345·10 17
знак
порядок P
значащая часть Z
положение
цифры числа
запятой
Теоретически оптимальный вариант
(целая часть = 0):
0,0012345 = 0,12345·10 -2
X 10
12,345 = 0,12345·10 2
всегда 0
один разряд расходуется впустую!
основание системы счисления
Экономный вариант (целая часть от 1 до B):
0,0012345 = 1,2345·10 -3
X 10
12,345 = 1,2345·10 1
повышение точности при конечном числе разрядов
Нормализованная форма:
значащая часть Z удовлетворяет условию 1 ≤ Z B , где B – основание системы счисления
(стандарт IEEE 754 ) .
Пример: 17,25 = 10001,01 2 = 1,000101 2 ·2 4
всегда 1 , её можно не хранить в памяти!
5,375 =
7,625 =
27,875 =
13,5 =
0,125 =
Число обычной точности ( single )
знак
порядок
значащая часть
-17,25 = -10001,01 2 = -1,000101 2 ·2 4
single : 4 байта = 32 бита
31
22
30
23
0
1
1
0
0
0
0
0
1
1
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
знак
мантисса = дробная часть Z
порядок со смещением
p = 4 + 127 = 131 = 10000011 2
для single
1
1
0
0
0
0
0
1
1
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
С
0
A
8
1
компактная запись в шестнадцатеричной системе
Диапазон вещественных чисел
тип
single
диапазон
1,4·10 -45 – 3,4·10 38
double
число десятичных значащих цифр
размер (байт)
7-8
4,9·10 -324 – 1,8·10 308
extended
4
15-16
3,6·10 -4951 – 1,2·10 4932
8
19-20
10
Extended – тип для вычислений в сопроцессоре, единица в значащей части не скрывается.
Single, double – только для хранения.
Операции с вещественными числами
Сложение и вычитание
Как сложить два числа с плавающей запятой?
1,2345 ·10 – 5 + 1,2345 ·10 5 = ?
Пример: 7,25 = 111,01 2 = 1,1101 2 ·2 2
1,75 = 1,11 2 = 1,11 2 ·2 0
- порядки выравниваются до большего
1,75 = 0,0111 2 ·2 2
2) значащие части складываются ( и ли вычитаются)
1,1101 2
+
0,0111 2
10,0100 2
3) результат нормализуется
10,01 2 ·2 2 = 1,001 2 ·2 3
Умножение и деление
Как умножить два числа с плавающей запятой?
1,2345 ·10 – 5 · 1,2345 ·10 5 = ?
Пример: 1,75 = 1,11 2 = 1,11 2 ·2 0
6 = 110 2 = 1,1 2 ·2 2
1) значащие части умножаются (или делятся)
1,11 2 · 1,1 2 = 10,101 2
2) порядки складываются (или вычитаются)
0 + 2 = 2
- результат нормализуется
10,101 2 ·2 2 = 1,0101 2 ·2 3
Правила записи ответа:
17,25=10001,01 2 =1,000101 2 ·2 4
17,25=10001,01(2)=1,000101 2 ·2^4