Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0;1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×100, 0,001×10−1, 0,01×10−2, 0,1×10−3), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (не включительно), а мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как −∞ и +∞). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «1», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем 2 (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).
|
|
Число половинной точности (Binary16, Half precision).
Число половинной точности -компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — 16 бит или 2 байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.
Порядок записан со сдвигом −15. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле 2 b −1−1, где b — число бит, отведенное на хранение порядка (в случае числа половинной точности b =5).
Ограничения точности
· Целые от нуля до 2048
· передаются как есть.
· Целые от 2049 до 4096
· округляются к ближайшему чётному целому.
· Целые от 4097 до 8192
· округляются до ближайшего целого, делящегося нацело на четыре.
· Целые от 8193 до 16384
· округляются до ближайшего целого, делящегося на восемь.
· Целые от 16385 до 32768
· округляются до ближайшего целого, делящегося на шестнадцать.
· Целые от 32769 до 65535 округляются до ближайшего целого, делящегося на тридцать два.
Число одинарной точности (Binary32, Single precision, float).
- компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — 32 бита или 4 байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.
|
|
Порядок записан со сдвигом −127.
Число двойной точности (Binary64, Double precision, double).
- компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — 64 бита или 8 байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.
Число четверной точности (Binary128, Quadruple precision).
- компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — 128 бит или 16 байт). Используется в случае необходимости крайне высокой точности.
Порядок записан со сдвигом −16383.
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью). В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.
Задание 1.
Переведите числа в десятичную систему, а затем проверьте результаты, выполнив обратные переводы:
1.
87 | 2 | |||||
86 | 43 | 2 | ||||
1 | 42 | 21 | 2 | |||
1 | 20 | 10 | 2 | |||
1 | 10 | 5 | 2 | |||
0 | 4 | 2 | 2 | |||
1 | 2 | 1 | ||||
0 |
2.
3.
Задание 2.
Выполните сложение и умножение.
1. 100012 и 11112
100012 + 11112 = 1000002
1 0 0 0 1
+ 1 1 1 1
1 0 0 0 0 0
1000012 * 11112 =111111112
1 0 0 0 1 * 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 |
2. 5418 и 658
5418 = 1011000012
658 = 1101012
1011000012 + 1101012 = 1100101102 = 6268
1 0 1 1 0 0 0 0 1
+ 1 1 0 1 0 1
1 1 0 0 1 0 1 1 0
1011000012 * 1101012 = 1001001000101012 = 444258
1 0 1 1 0 0 0 0 1
* 1 1 0 1 0 1
1 1 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 1
0 0 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 1
1 0 0 1 0 0 1 0 0 0 1 0 1 0 1
3. 44416 и 3A316
44416 = 100010001002
3A316 = 11101000112
100010001002 + 11101000112 = 111111001112 = 7E716
1 0 0 0 1 0 0 0 1 0 0
+ 1 1 1 0 1 0 0 0 1 1
1 1 1 1 1 1 0 0 1 1 1
100010001002 * 11101000112 = 111110000011010011002 = F834C16
1 0 0 0 1 0 0 0 1 0 0
* 1 1 1 0 1 0 0 0 1 1
1 0 0 0 1 0 0 0 1 0 0
1 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1 0 0
1 0 0 0 1 0 0 0 1 0 0
1 0 0 0 1 0 0 0 1 0 0
1 1 1 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 0 0
Задание 3.
По логической формуле постройте таблицу истинности и составьте логическую схему.
Вектор функции: 1101110111010101
Х1 | Х2 | Х3 | Х4 | Х1˄Х2 | Х1˄Х2˅Х3 | ||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
|
|
Задание 4.
Составьте функциональную схему многоразрядного параллельного двоичного сумматора для сложения следующих чисел.
Задание 6.
Получите шестнадцатеричную форму внутреннего представления числа в формате с плавающей точкой в 4-х байтовой ячейке.
87,022
1. Переводим число в двоичную систему.
87,02210 = 1010111,000001011012
Целая часть
8 | 7 | 2 |
| |||||||
8 | 6 | 4 | 3 | 2 | ||||||
1 | 4 | 2 | 2 | 1 | 2 |
| ||||
1 | 2 | 0 | 1 | 0 | 2 | |||||
1 | 1 | 0 | 5 | 2 | ||||||
0 | 4 | 2 | 2 | |||||||
1 | 2 | 1 | ||||||||
0 |
Получилось: 8710 = 10101112
Дробная часть
0 | .2 | 2 |
. |
| 2 |
| ||
0 | 4 | 4 |
| ||
|
| 2 |
| ||
0 | 8 | 8 |
| ||
|
| 2 |
| ||
1 | 7 | 6 |
| ||
|
| 2 |
| ||
1 | 5 | 2 |
| ||
|
| 2 |
| ||
1 | 0 | 4 |
| ||
|
| 2 |
| ||
0 | 0 | 8 |
| ||
|
| 2 |
| ||
0 | 1 | 6 |
| ||
|
| 2 |
| ||
0 | 3 | 2 |
| ||
|
| 2 |
| ||
0 | 6 | 4 |
| ||
|
| 2 |
| ||
1 | 2 | 8 |
| ||
|
| 2 |
| ||
0 | 5 | 6 |
| ||
|
| 2 |
Получилось: 0.02200000000000610 = 0.000001011012
Сложим части 10101112 + 0.000001011012 = 1010111.000001011012
2. Сдвигаем точку влево так, чтобы она отделяла в целой части только одну цифру и фиксируем величину сдвига, как двоичный порядок
1010111.000001011012 = 1.010111000001011012 * 26
3. Отбрасываем целую часть, получая мантиссу
010111000001011012
4. Прибавляем к порядку 127
6 + 127 = 13310 = 100001012
1 | 3 | 3 | 2 | |||||||||
1 | 3 | 2 | 6 | 6 | 2 | |||||||
1 | 6 | 6 | 3 | 3 | 2 | |||||||
0 | 3 | 2 | 1 | 6 | 2 | |||||||
1 | 1 | 6 | 8 | 2 | ||||||||
| 0 | 8 | 4 | 2 | ||||||||
0 | 4 | 2 | 2 | |||||||||
0 | 2 | 1 | ||||||||||
0 |
5. Приписываем к порядку его знак - 0 (сдвиг был влево), получая
0100001012
6. Приписываем справа мантиссу и дополняем её нулями справа до 32 разрядов
010000101010111000001011010000002 = 01000010 10101110 00001011 010000002
7. Переводим результат в шестнадцатеричную систему счисления, заменяя каждые 4 двоичных цифры соответствующей шестнадцатеричной
|
|
01000010 10101110 00001011 010000002 = 111870240010 = 42AE0B4016