Материал: билеты теория информации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Описание преобразования в 32 битный формат IEEE 754:

  1. Число может быть + или -. Поэтому отводится 1 бит для обозначения знака числа: 0-положительное, 1-отрицательное. Этот самый старший бит в 32 битной последовательности.

  2. Далее пойдут биты экспоненты, для этого выделяют 1 байт (8 бит). Экспонента может быть, как и число, со знаком + или -. Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127(0111 1111). То есть, если наша экспоната = +7 (+111 в двоичной), то смещенная экспонента = 7+127=134. А если бы, наша экспонента была -7, то смещенная экспонета=127-7 =120. Смещенную экспоненту записывают в отведенные 8 бит. При этом, когда нам будет нужно получить экспоненту двоичного числа, мы просто отнимем 127 от этого байта.

  3. Оставшиеся 23 бита отводят для мантиссы. Но, у нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1<=M<2. Нет смыла, записывать единицу в отведенные 23 бита, поэтому в отведенные 23 бита записывают остаток от мантиссы.

В результате десятичное число 155,625 представленное в IEEE 754 c одинарной точностью равно 431BA000 (hex).

Преобразования числа формата 32 бит IEEE 754 в десятичное число

Чтобы записать число в стандарте IEEE 754 или восстановить его, необходимо знать три параметра:

  • S- бит знака (31-й бит)

  • E- смещенная экспонента (30-23 биты)

  • M - остаток от мантиссы (22-0 биты)

Это целые числа которые записанные в числе IEEE 754 в двоичном виде.

Приведём формулу для получения десятичного числа из числа IEEE754 одинарной точности:

 где F - десятичное число

Проверяем наш пример:  F =(-1)0∙2(134-127)∙(1+ 1810432 / 223)= 27∙(1+0,2158203125)=128∙1,2158203125=155,625

Вывод этой формулы приводить не буду, всё видно и так. Поясню только (1+ M/223) - это мантисса, единица в этой формуле- это та единица, которую мы выбросили из 23 бит, а остаток мантиссы в десятичном виде находим отношением двух целых чисел - остатка мантиссы к целому.

Формальное представление чисел в стандарте IEEE 754 для любого формата точности.

Рис. 1 Представление числа в формате IEEE 754

где:

  • S - бит знака, если S=0 - положительное число; S=1 - отрицательное число

  • E - смещенная экспонента двоичного числа; exp2 = E - (2(b-1) - 1) - экспонента двоичного нормализованного числа с плавающей точкой. (2(b-1) -1) - заданное смещение экспоненты (в 32-битном ieee754 оно равно +127 см.выше)

  • M - остаток мантиссы двоичного нормализованного числа с плавающей точкой

Формула вычисления десятичных чисел с плавающей точкой, из чисел представленных в стандарте IEEE754:

(Формула №1)

Используя формулу №1 вычислим формулы для нахождения десятичных чисел из форматов одинарной (32 бита) и двойной (64 бита) точности IEEE 754:

Рис.2 Формат числа одинарной точности (single-precision) 32 бита

Рис.3 Формат числа двойной точности (double-precision) 64 бита

Представление денормализованного числа и других чисел в формате IEEE 754

Если применить формулу №1 для вычисления минимального и максимального числа одинарной точности представленного в IEEE754, то получим следующие результаты:

  • 00 00 00 00 hex= 5,87747175411144e-39 (минимальное положительное число)

  • 80 00 00 00 hex=-5,87747175411144e-39 (минимальное отрицательное число)

  • 7f ff ff ff hex= 6,80564693277058e+38 (максимальное положительное число)

  • ff ff ff ff hex=-6,80564693277058e+38 (максимальное отрицательное число)

Отсюда видно, что невозможно представить число нуль или бесконечность в заданном формате.

Поэтому формула №1 не применяется в следующих случаях:

1. число IEEE754=00 00 00 00hex считается числом +0 число IEEE754=80 00 00 00hex считается числом -0

2. число IEEE754=7F 80 00 00hex считается числом +∞ число IEEE754=FF 80 00 00hex считается числом -∞

3. числа IEEE754=FF (1xxx)X XX XXhex не считается числами (NAN), кроме случая п.2     числа IEEE754=7F (1xxx)X XX XXhex не считается числами (NAN), кроме случая п.2 Число представленное в битах с 0...22 могут быть любым числом кроме 0 (т.е.+∞ и -∞ ).

4. числа IEEE754=(x000) (0000) (0xxx)X XX XXhex считаются денормализованными числами, за исключением чисел п.1(то есть -0 и +0)

Формула расчета денормализованных чисел:

(Формула №2)

Пояснения к исключительным числам:

  1. С нулем понятно. Без него никак нельзя. Смущает только наличие двух нулей. Думаю, это было сделано для симметричности.

  2. - ∞/ +∞ , тоже понятно. Числа, которые больше границ диапазона представления чисел считаются бесконечными.

  3. Не числа NAN(No a Numbers). К ним относятся символы, или результаты недопустимых операций.

  4. Денормализованные числа. Это числа, мантиссы которых лежат в диапазоне 0.1 <= M <1. Денормализованные числа находятся ближе к нулю, чем нормализованные. Денормализованные числа как бы разбивают минимальный разряд нормализованного числа на некоторое подмножество. Сделано так потому, что в технической практике чаще встречаются величины близкие к нулю.

Полный диапазон чисел одинарной точности (32 бит) по стандарту IEEE754

Полный диапазон чисел двойной точности (64 бит) по стандарту IEEE754

Округление чисел в стандарте IEEE 754.

Стандарт IEEE754 предусматривает четыре способа округления чисел.

Способы округления чисел по стандарту IEEE 754:

  1. Округление стремящееся к ближайшему целому.

  2. Округление стремящееся к нулю.

  3. Округление стремящееся к +∞

  4. Округление стремящееся к -∞

Как происходит округление показано на примерах в таблице 3. При преобразовании чисел необходимо выбрать один из способов округления. По умолчанию это первый способ -округление к ближайшему целому. Часто в различных устройствах используют второй способ - округление к нулю. При округлении к нулю нужно просто отбросить не значащие разряды числа, поэтому этот способ самый легкий в аппаратной реализации.

Проблемы компьютерных вычислений, вызванные использованием стандарта IEEE754.

Стандарт IEEE 754 широко применяется в технике и программировании. Большинство современных микропроцессоров изготовляются с аппаратной реализацией представления вещественных переменных в формате IEEE754. Язык программирования и программист не могут изменить эту ситуацию, иного преставления вещественного числа в микропроцессоре не существует. Когда создавали стандарт IEEE754-1985 представление вещественной переменной в виде 4 или 8 байт казалось очень большой величиной, так как объём оперативной памяти MS-DOS был равен 1 Мб. А, программа в этой системе могла использовать только 0,64 Мб. Для современных ОС размер в 8 байт является ничтожным, тем не менее переменные в большинстве микропроцессоров продолжают представлять в формате IEEE754-1985.

РАННИЕ СИМВОЛЬНЫЕ КОДИРОВКИ (5/6 BIT).

сегодня байт априори считается фиксированной длины — 8 бит, символы называются глифами, а кодовая таблица является просто способом графического представления кодировки. В былые времена позиции символов в кодировке определялись двойным номером «X / Y», где Х — номер колонки, а Y — номер строки. Сегодня достаточно дать его номер в десятичной или шестнадцатеричной форме.

Да что там, если быть точным, то первое кодирование информации придумали еще греки около 350 года до н.э. Они использовали его для дальней связи с помощью факелов. Для кодирования своей азбуки они применяли 32 комбинации из пяти зажженных или потушенных факелов.

А в конце XVIII века Клод Шапп создал первую телеграфную связь — между Парижем и Лиллем (225 км) с помощью оптического телеграфа (система башен с подвижными шестами). Его система сохраняла свое значение до введения электрического телеграфа в середине XIX века. Как мы знаем, именно для электрического телеграфа Самуэль Морзе в 1837 году изобрел свой «код Морзе», в котором используется переменное число длинных и коротких импульсов — точек и тире (чем не 0 и 1?). Именно код Морзе стал первой международно признанной системой кодирования.

Еще одно значимое событие — в 1874 году Эмиль Бодо адаптировал код Френсиса Бэкона для телеграфа. Код вводился с клавиатуры, состоящей из пяти клавиш, нажатие или ненажатие клавиши соответствовало передаче или непередаче одного бита в пятибитном коде. Максимальная скорость передачи — чуть больше 190 знаков в минуту (или 16 бит в секунду, или 4 бода).

Взяв за основу код Бодо, в 1901 году Дональд Мюррей переработал его, изменил порядок знаков и добавил некоторые дополнительные знаки. Это было связано с изобретением клавиатуры для телеграфного аппарата. Теперь порядок кодов был не связан с требованиями удобства оператора, и они были переупорядочены, чтобы минимизировать износ оборудования при переключении. Общие принципы — пятибитная кодировка и использование буквенного и цифрового регистров — остались неизменными. Модификация нового кода была принята в 1932 году как стандарт ITA2 или CCITT­2 (табл. 1). В СССР была принята модификация CCITT­2 с дополнительным регистром для кириллицы — МТК­2.

7-BIT СИМВОЛЬНЫЕ КОДИРОВКИ.

1) ASCII

ASCII (англ. American standard code for information interchange, [ˈæs.ki][1]) — название таблицы (кодировки, набора), в которой некоторым распространённым печатным и непечатным символам сопоставлены числовые коды. Таблица была разработана и стандартизована в США, в 1963 году.

Таблица ASCII определяет коды для символов:

  • десятичных цифр;

  • латинского алфавита;

  • национального алфавита[];

  • знаков препинания;

  • управляющих символов.

Изначально (1963 год) ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; 2в 7 степени=128); при этом старший 7-й бит (нумерация с нуля) использовался для контроля ошибок, возникших при передаче данных. Со временем кодировка была расширена до 256 символов (28=256); коды первых 128 символов не изменились. ASCII стала восприниматься как половина 8-битной кодировки, а «расширенной ASCII» называли ASCII с задействованным 8-м битом (например, КОИ-8).

Таблица ASCII создавалась для обмена информацией по телетайпу (электромеханическая печатная машина, используемая для передачи между двумя абонентами текстовых сообщений) . В набор были включены непечатаемые символы, используемые как команды для управления устройством телетайп. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывая специфику устройства.

На подавляющем большинстве современных компьютеров, минимально адресуемая единица памяти — байт (размером в 8 бит); поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.

Если каждому символу алфавита сопоставить определенное целое число

(например, порядковый номер), то с помощью двоичного кода можно кодировать и текстовую информацию. Восьми двоичных разрядов достаточно для кодирования 256 различных символов. Этого хватит, чтобы выразить различнымиькомбинациями восьми битов все символы английского и русского языков, как строчные, так и прописные, а также знаки препинания, символы основных арифметических действий и некоторые общепринятые специальные символы, например символ «§».

Технически это выглядит очень просто, однако всегда существовали достаточно веские организационные сложности. В первые годы развития вычислительной техники они были связаны с отсутствием необходимых стандартов, а в настоящее время вызваны, наоборот, изобилием одновременно действующих и противоречивых стандартов. Для того чтобы весь мир одинаково кодировал текстовые данные, нужны единые таблицы кодирования, а это пока невозможно

из-за противоречий между символами национальных алфавитов, а также противоречий корпоративного характера.

Для английского языка, захватившего де-факто нишу международного средства общения, противоречия уже сняты. Институт стандартизации США (ANSIAmerican National Standard Institute) ввел в действие систему кодирования ASCII (American Standard Code for Information Interchange — стандартный код информационного обмена США). В системе ASCII закреплены две таблицы кодирования — базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255.

Первые 32 кода базовой таблицы, начиная с нулевого, отданы производителям аппаратных средств (в первую очередь производителям компьютеров и печатающих устройств). ОТ 1 ДО 1F. В этой области размещаются так называемые управляющие коды, которым не соответствуют никакие символы языков, и, соответственно, эти коды не выводятся ни на экран, ни на устройства печати, но ими можно управлять тем, как производится вывод прочих данных.

Начиная с кода 32 по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических действий и некоторых