Представление дробных чисел в формате IEEE-754. Информатика КР. Представление дробных чисел в формате ieee754
Скачать 56.03 Kb.
|
Министерство науки и высшего образования Российской Федерации Муромский институт (филиал) Государственного образовательного учреждения высшего образования «Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых» (МИ ВлГУ) Факультет РЭКС Кафедра РТ КОНТРОЛЬНАЯ РАБОТА По: Информатике Тема: Представление дробных чисел в формате IEEE-754 Руководитель (фамилия, инициалы) (подпись) (дата) Студент (группа) (фамилия, инициалы) (подпись) (дата) Муром 2021 год Цель занятия - Приобретение навыков перевода дробных чисел в двоичный код. - Приобретение навыков использования дробных чисел в формате IEEE 754. Постановка задачи - Перевести заданное число в формат IEEE 754. - Перевести, используя формулы, число, представленное в формате IEEE 754, в десятичную форму. Задание №1 Представить нормализованное число 213,07 в формате IEEE 754 1.1 одинарной точности, 1.2 двойной точности. Решение 1.1 Переведем число в двоичное представление. 213 = 110101012 Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения. 0.07*2 = 0.14 (целая часть 0); 0.14*2 = 0.28 (целая часть 0); 0.28*2 = 0.56 (целая часть 0); 0.56*2 = 1.12 (целая часть 1); 0.12*2 = 0.24 (целая часть 0); 0.24*2 = 0.48 (целая часть 0); 0.48*2 = 0.96 (целая часть 0); 0.96*2 = 1.92 (целая часть 1); 0.92*2 = 1.84 (целая часть 1); 0.84*2 = 1.68 (целая часть 1); 0.68*2 = 1.36 (целая часть 1); 0.36*2 = 0.72 (целая часть 0); 0.72*2 = 1.44 (целая часть 1); 0.44*2 = 0.88 (целая часть 0); 0.88*2 = 1.76 (целая часть 1); 0.76*2 = 1.52 (целая часть 1); 0.52*2 = 1.04 (целая часть 1); 0.04*2 = 0.08 (целая часть 0); 0.08*2 = 0.16 (целая часть 0); 0.16*2 = 0.32 (целая часть 0); 0.32*2 = 0.64 (целая часть 0); 0.64*2 = 1.28 (целая часть 1); 0.28*2 = 0.56 (целая часть 0) Получаем число в 2-ой системе счисления: 00010001111010111000010 0.07 = 000100011110101110000102 В итоге получаем число: 11010101.000100011110101110000102 Сдвинем число на 7 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа: Мантисса M=1.101010100010001111010111000010 Экспонента exp2=7 Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754. Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0 Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту. Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 7 + 127 = 134 Переведем экспоненту в двоичное представление. 134 = 100001102 Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M <2. Для экономии, единицу не записывают, а записывают только остаток от мантиссы: 10101010001000111101011 Для перевода необходимо умножить разряд числа на соответствующую ему степень разряда. 10101010001000111101011 = 222*1 + 221*0 + 220*1 + 219*0 + 218*1 + 217*0 + 216*1 + 215*0 + 214*0 + 213*0 + 212*1 + 211*0 + 210*0 + 29*0 + 28*1 + 27*1 + 26*1 + 25*1 + 24*0 + 23*1 + 22*0 + 21*1 + 20*1 = 4194304 + 0 + 1048576 + 0 + 262144 + 0 + 65536 + 0 + 0 + 0 + 4096 + 0 + 0 + 0 + 256 + 128 + 64 + 32 + 0 + 8 + 0 + 2 + 1 = 5575147 В десятичном коде мантисса выражается числом 5575147 В результате число 213.07 представленное в IEEE 754 c одинарной точностью равно 01000011010101010001000111101011. Переведем в шестнадцатеричное представление. Разделим исходный код на группы по 4 разряда. 010000110101010100010001111010112 = 0100 0011 0101 0101 0001 0001 1110 1011 2 Получаем число: 0100 0011 0101 0101 0001 0001 1110 1011 2 = 435511EB16 Проверим правильность перевода. Чтобы записать число в стандарте IEEE 754 или восстановить его, необходимо знать три параметра: S - бит знака (31-й бит). E - смещенная экспонента (30-23 биты). M - остаток от мантиссы (22-0 биты). Формула для получения десятичного числа из числа IEEE754 одинарной точности: F = (-1)S2(E-127)(1+M/223) F = (-1)02(134-127)(1+5575147/223) = 128*1.6646093130112 = 213.06999206543. Решение 1.2 Переведем число в двоичное представление 213 = 110101012 Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения. 0.07*2 = 0.14 (целая часть 0); 0.14*2 = 0.28 (целая часть 0); 0.28*2 = 0.56 (целая часть 0); 0.56*2 = 1.12 (целая часть 1); 0.12*2 = 0.24 (целая часть 0); 0.24*2 = 0.48 (целая часть 0); 0.48*2 = 0.96 (целая часть 0); 0.96*2 = 1.92 (целая часть 1); 0.92*2 = 1.84 (целая часть 1); 0.84*2 = 1.68 (целая часть 1); 0.68*2 = 1.36 (целая часть 1); 0.36*2 = 0.72 (целая часть 0); 0.72*2 = 1.44 (целая часть 1); 0.44*2 = 0.88 (целая часть 0); 0.88*2 = 1.76 (целая часть 1); 0.76*2 = 1.52 (целая часть 1); 0.52*2 = 1.04 (целая часть 1); 0.04*2 = 0.08 (целая часть 0); 0.08*2 = 0.16 (целая часть 0); 0.16*2 = 0.32 (целая часть 0); 0.32*2 = 0.64 (целая часть 0); 0.64*2 = 1.28 (целая часть 1); 0.28*2 = 0.56 (целая часть 0); 0.56*2 = 1.12 (целая часть 1); 0.12*2 = 0.24 (целая часть 0): 0.24*2 = 0.48 (целая часть 0); 0.48*2 = 0.96 (целая часть 0); 0.96*2 = 1.92 (целая часть 1); 0.92*2 = 1.84 (целая часть 1); 0.84*2 = 1.68 (целая часть 1); 0.68*2 = 1.36 (целая часть 1); 0.36*2 = 0.72 (целая часть 0); 0.72*2 = 1.44 (целая часть 1); 0.44*2 = 0.88 (целая часть 0); 0.88*2 = 1.76 (целая часть 1); 0.76*2 = 1.52 (целая часть 1); 0.52*2 = 1.04 (целая часть 1); 0.04*2 = 0.08 (целая часть 0); 0.08*2 = 0.16 (целая часть 0); 0.16*2 = 0.32 (целая часть 0); 0.32*2 = 0.64 (целая часть 0); 0.64*2 = 1.28 (целая часть 1); 0.28*2 = 0.56 (целая часть 0); 0.56*2 = 1.12 (целая часть 1); 0.12*2 = 0.24 (целая часть 0); 0.24*2 = 0.48 (целая часть 0); 0.48*2 = 0.96 (целая часть 0); 0.96*2 = 1.92 (целая часть 1); 0.92*2 = 1.84 (целая часть 1); 0.84*2 = 1.68 (целая часть 1); 0.68*2 = 1.36 (целая часть 1); 0.36*2 = 0.72 (целая часть 0) Получаем число в 2-ой системе счисления: 0001000111101011100001010001111010111000010100011110 0.07 = 00010001111010111000010100011110101110000101000111102 В итоге получаем число: 11010101.00010001111010111000010100011110101110000101000111102 Сдвинем число на 7 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа: Мантисса M=1.10101010001000111101011100001010001111010111000010100011110 Экспонента exp2=7 Преобразование двоичного нормализованного числа в 64 битный формат IEEE 754. Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0 Следующие 11 бит (с 2-го по 12-й) отведены под экспоненту. Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте +1023. Таким образом, наша экспонента: 7 + 1023 = 1030 Переведем экспоненту в двоичное представление. 1030 = 100000001102 Оставшиеся 52 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M <2. Для экономии, единицу не записывают, а записывают только остаток от мантиссы: 1010101000100011110101110000101000111101011100001010 В результате число 213.07 представленное в IEEE 754 c двойной (double) точностью равно 0100000001101010101000100011110101110000101000111101011100001010. Переведем в шестнадцатеричное представление. Разделим исходный код на группы по 4 разряда. 01000000011010101010001000111101011100001010001111010111000010102 = 0100 0000 0110 1010 1010 0010 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 2 Получаем число: 0100 0000 0110 1010 1010 0010 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 2 = 406AA23D70A3D70A16. Задание №2 Перевести число 0100 1011 1101 1000 0101 0000 0000 0000, заданное в формате IEEE754 в десятичную форму Решение Чтобы записать число в стандарте IEEE 754 или восстановить его, необходимо знать три параметра: S - бит знака (63-й бит). E - смещенная экспонента (62-50 биты). M - остаток от мантиссы (51-0 биты). Переведем число 0100 1011 1101 1000 0101 0000 0000 0000 в двоичное представление. 0000000100000000 0001000000010001 0001000100000001 0001000000000000 0000000100000001 0000000000000000 0000000000000000 0000000000000000 Получаем число: 0100 1011 1101 1000 0101 0000 0000 000016 = 0000000100000000 0001000000010001 0001000100000001 0001000000000000 0000000100000001 0000000000000000 0000000000000000 00000000000000002 63 разряд равен 0, следовательно, число положительное Выделяем разряды смещенной экспоненты (62-50): 00000010000 Переводим в десятичное представление. Для перевода необходимо умножить разряд числа на соответствующую ему степень разряда. 00000010000 = 210*0 + 29*0 + 28*0 + 27*0 + 26*0 + 25*0 + 24*1 + 23*0 + 22*0 + 21*0 + 20*0 = 0 + 0 + 0 + 0 + 0 + 0 + 16 + 0 + 0 + 0 + 0 = 16 Таким образом, экспонента равна: 16 - 1023 = -1007 Выделяем разряды мантиссы (51-0): 0000 0001000000010001 0001000100000001 0001000000000. Добавляем 1. Следовательно, мантисса равна 1.0000 0001000000010001 0001000100000001 0001000000000 Сдвигаем полученную мантиссу на -1007 разрядов вправо. Получаем: 0.0000 0001000000010001 0001000100000001 00010000000001 Получаем десятичный код числа: Для перевода целой части необходимо умножить разряд числа на соответствующую ему степень разряда. 0 = 20*0 = 0 = 0 Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда. 0000 0001000000010001 0001000100000001 00010000000001 = 2-1*0 + 2-2*0 + 2-3*0 + 2-4*0 + 2-5* + 2-6*0 + 2-7*0 + 2-8*0 = 0 В итоге получаем число 0 Таким образом, число 0100 1011 1101 1000 0101 0000 0000 0000 в десятичном коде представляет собой число 0. |