КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перевод чисел из формата с фиксированной запятой в формат с плавающей запятой и обратно
В начале рассмотрим алгоритм перевода числа из формата с фикси-рованной запятой в формат с плавающей запятой. Перевод числа из формата с фиксированной запятой [A]фв формат с плавающей запятой [A]п.з возможен только в случае выполнения следующего условия: n m n ф,
где n m это длина мантиссы для числа в формате с плавающей запятой, а n ф - длина мантиссы для числа в формате с фиксированной запятой. Условно примем, что длина разрядной сетки, выделенной для изображения мантиссы числа как с плавающей так и с фиксированной запятой, одинаковая и, например, равна 8, т.е. n ф = n m = 8. Для представления характеристики числа с плавающей запятой, к примеру, отводится 6 разрядов. Тогда l = 3210. В начале процедуры перевода модуль числа [A]ф, представленного в прямом коде без знакового разряда, переписывается в поле мантиссы [A]п.з. Причем, таким образом, чтобы, независимо от длины мантиссы, изображение модуля числа [A]ф разместилось в самых младших разрядах поля мантиссы. В этом случае исходная характеристика принимается следующей:
r = l + n a = 3210 + 810 = 4010.
Это объясняется тем, что при переводе числа из формата с фиксированной запятой в формат с плавающей запятой (только при таком переводе!) показатель степени порядка p может быть только n ф. В процессе перевода проверяется старший разряд мантиссы, если он обнулен, то производится сдвиг изображения мантиссы влево на один разряд и вычитается 1 из значения r. Такая процедура повторяется до тех пор пока в старшем разряде мантиссы не появится 1, или же пока значение r не станет равным l. В этих случаях процедура перевода заканчивается. Например, в случае перевода [1]ф в [1]п.з получается r = 3310, изображение мантиссы будет 0,12. Если исходное число было отрицательным, то в разряд, отведенный под знак мантиссы записывается 1. В противном случае 0. Например, переведем 510 = 000001012 в формат с плавающей, n m = 8, n ф = 8, l = 8 = 10002, r = l + n m = 10002 + 10002 Последовательность выполнения процедуры нормализации приведена в таблице 3.3:
Т а б л и ц а 3.3 С.р. Мантисса М.р.\ r2 = l 2 + (nm - 1)2 0 0 0 0 0 1 0 1 r = 1000 + 1000 0 0 0 0 1 0 1 0 r = 1000 + 0111 0 0 0 1 0 1 0 0 r = 1000 + 0110 0 0 1 0 1 0 0 0 r = 1000 + 0101 0 1 0 1 0 0 0 0 r = 1000 + 0100 1 0 1 0 0 0 0 0 r = 1000 + 0011
В результате получили число, мантисса которого равна 0,1012 с характерис-тикой r = 10112 = 1110, т.е. показатель степени порядка равен 00112 = 310. В случае, когда исходное число является правильной дробью, то дробь записывают в старшие разряды мантиссы и в качестве исходной характеристики принимается r = l. Далее перевод производится аналогично выше описанному. Например, переведем 0,2510 = 0,012 при условиях таких же, как и в первом примере:
Т а б л и ц а 3.4. С.р. Мантисса М.р. r2 = l 2 - 1 0 1 0 0 0 0 0 0 r = 1000 1 0 0 0 0 0 0 0 r = 1000 - 1 = 0111
Получаем число 0,12, r = 01112 = 710, а показатель степени порядка равен -1. А теперь приведем принцип перевода числа из формата с плавающей запятой в формат с фиксированной запятой. Рассмотрим тот же случай, когда n ф = n m, а [A]ф - целое число. Если r < l + n ф, то изображение мантиссы сдвигается вправо на один разряд с прибавлением единицы к значению r при каждом шаге сдвига. Сдвиги прекращаются как только станет справедливым равенство
r = l + n ф.
Следовательно, если исходно r = l + n ф., то сдвиги не нужны. Если же r = l + nф, то преобразование невозможно, т.к. будет принципиально ошибочным. Полученное после необходимых сдвигов (или без них) изображение мантиссы переписывается в разрядную сетку, отведенную под модуль числа [A]ф. Если знак мантиссы был отрицателен: Sm = 1, то представление [A]ф переводится в дополнительный код. Например, денормализуем число 0.1012 с характеристикой r = 10112:
Т а б л и ц а 3.5. С.р. Мантисса М.р. r 2 = l 2 + (p + 1)2 1 0 1 0 0 0 0 0 r = 1000 + 0011 0 1 0 1 0 0 0 0 r = 1000 + 0100 0 0 1 0 1 0 0 0 r = 1000 + 0101 0 0 0 1 0 1 0 0 r = 1000 + 0110 0 1 0 0 1 0 1 0 r = 1000 + 0111 0 0 0 0 0 1 0 1 r = 1000 + 1000
Получаем 510.
В общем случае, когда n m > n ф, обязательно должно выполняться следующее условие:
r - l n ф.
Если это условие не выполняется, то в результате денормализации получим число по величине меньшее исходного, т.е. результат перевода будет ошибочным. В случае, когда [A]ф правильная дробь и r < l, мы также начинаем сдвигать число вправо, прибавляя к значению к единицу при каждом шаге сдвига до тех пор, пока r станет равным l. Затем, начиная со старшего разряда мантиссы, выделяем столько разрядов, сколько отведено их для представления числа в формате с фиксированной запятой, и считываем их в разрядную сетку, отведенную для представления числа в формате с фиксированной запятой. Например, денормализуем число 0,12 с характеристикой 01112:
Т а б л и ц а 3.6. С.р. Мантисса М.р. r 2 = l 2 + 1 1 0 0 0 0 0 0 0 r = 0111 0 1 0 0 0 0 0 0 r = 0111 + 1 = 1000
Получаем 0.012 и переписываем это число в разрядную сетку, отведенную для представления чисел в формате с фиксированной запятой. Когда n m > n ф, если не выполняется следующее условие:
l - r n ф,
то в результате денормализации получим 0.
Дата добавления: 2014-01-06; Просмотров: 807; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |