Какие существуют способы кодирования вещественных чисел

Какие существуют способы кодирования вещественных чисел

2. Кодирование данных двоичным кодом

2.1. Двоичное кодирование

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

Кодирование – это представление данных одного типа через данные другого типа. Естественные языки – это не что иное, как системы кодирования понятий для выражения мыслей с помощью речи. В качестве другого примера можно привести азбуку Морзе для передачи телеграфных сигналов, морскую флажковую азбуку.

В вычислительной технике используется двоичное кодирование, основанное на представлении данных последовательностью из двух символов: 0 и 1. Эти знаки называются двоичными цифрами, по-английски digit или сокращенно bit (бит).

Одним битом можно выразить два понятия: да или нет, черное или белое, истина или ложь, 0 или 1. Если количество битов увеличить до двух, то уже можно выразить четыре различных понятия:

Тремя битами можно закодировать 8 понятий:

001 011 100 101 110 111.

Увеличивая на единицу количество разрядов, мы увеличиваем в два раза количество значений, которое может быть выражено в данной системе, то есть

N = 2 m

где N – количество кодируемых значений;
m – количество двоичных разрядов.

2.2. Кодирование целых чисел

Любое целое число можно представить в виде разложения в полином с основанием два. Коэффициентами полинома являются числа 0 и 1. Например, число 11 может быть представлено в такой форме:

1 x 2 3 + 0 x 2 2 + 1 x 2 1 + 1 x 2 0 = 11

Коэффициенты этого полинома образуют двоичную запись числа 11: 1011.

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

Для представления целых чисел используется байт, имеющий восемь двоичных разрядов (рис. 2).

Рис. 2. Представление целых чисел.

Первый разряд используется для хранения знака числа. Обычно «+» кодируется нулём, а «–» – единицей. Диапазон представления целых чисел зависит от числа двоичных разрядов. С помощью одного байта могут быть представлены числа в диапазоне от –128 до +127. При использовании двух байтов могут быть представлены числа от –32 768 до +32 767.

2.3. Кодирование вещественных чисел

Существуют два способа представления вещественных чисел в памяти компьютера: с фиксированной точкой и с плавающей точкой.

При представлении вещественных чисел в форме с фиксированной точкой положение десятичной точки в машинном слове фиксировано (рис. 3).

Рис. 3. Вещественное число с фиксированной точкой.

Чаще всего точка фиксируется перед первым разрядом числа (рис.4).

Рис. 4. Вещественное число с точкой перед первым разрядом.

Целое число является частным случаем числа с фиксированной точкой, когда точка фиксирована после последнего разряда.

В форме с плавающей точкой вещественное число х представляется в виде

x = M x 2 p

где |M|

Рис. 5. Вещественное число с плавающей точкой.

Количество позиций, отводимых для мантиссы, определяет точность представления чисел, а количество позиций, отводимых для порядка – диапазон представления чисел.

Обычно мантисса записывается в нормализованном виде, то есть так, чтобы отсутствовали незначащие нули в старших разрядах:

0.0011101 ненормализованное представление,

0.1110100 нормализованное представление.

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

2.4. Кодирование текстовых данных

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

Технически это просто, но существуют организационные сложности. Для того чтобы весь мир одинаково кодировал текстовые данные, нужны единые таблицы кодирования, а это трудно осуществить из-за использования различных символов в национальных алфавитах. Сейчас по ряду причин наибольшее распространение получил стандарт США ANСII (American National Code for Information Interchange) – Американский национальный код для обмена информацией. В системе кодирования ANСII закреплены две таблицы кодирования: базовая со значениями кодов от 0 до 127 и расширенная с кодами от 128 до 255.

Коды от 0 до 31 базовой таблицы содержат так называемые управляющие коды, которым не соответствуют символы языка. Они служат для управления устройствами ввода-вывода. Коды с 32 по 127 служат для кодирования символов английского алфавита, знаков препинания, цифр и некоторых других символов. Расширенная таблица с кодами от 128 до 255 содержит набор специальных символов.

Аналогичные системы кодирования разработаны и в других странах. В России большое распространение имеет код КОИ-8.

Трудности создания единой системы кодирования текстовых данных связаны с ограниченным набором кодов (256). Если кодировать символы не 8-разрядными двоичными числами, а 16-разрядными, это позволит иметь набор из 65 536 различных кодов. Этого достаточно, чтобы в одной таблице разместить символы большинства языков. Такая система кодирования называется Unicode – универсальный код. Переход к этой системе долго сдерживался из-за недостатка памяти компьютеров, так как в системе Unicode все текстовые документы становятся вдвое длиннее. В настоящее время технические сложности преодолены и происходит постепенный переход на универсальную систему кодирования.

2.5. Кодирование графических данных

Общепринятым сегодня считается представление черно-белых иллюстраций в виде комбинации точек с 256 градациями серого цвета. При этом для кодирования яркости любой точки достаточно 8-разрядного двоичного числа.

Для кодирования цветных графических изображений применяется принцип декомпозиции произвольного цвета на три основных – красный, зелёный и синий. Для кодирования яркости каждой составляющей используется 256 значений (8 двоичных разрядов). Для кодирования цвета используются 24 разряда. Такая система кодирования обеспечивает представление 16,5 млн различных цветов.

Источник

Кодирование вещественных чисел

Формат с плавающей точкой использует представление вещест­вен­но­го числа R в виде произведения мантиссы m на основание системы счисления q в некоторой целой степени p, которую называют порядком: R = m * q p .

Представление числа в форме с плавающей точкой неоднозначно. Например, справедливы следующие равенства:

12.345 = 0.0012345 * 10 4 = 1234.5 * 10 -2 = 0.12345 * 10 2

Чаще всего в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в таком представлении должна удов­летворять определенному условию. В современных компьютерах ве­щест­венные (действительные) числа хранятся и обрабатываются в двоич­ной сис­теме счисления. Целая часть нормализованной мантиссы двоичного числа долж­на быть равна 1. При этом ноль кодируется и обрабатывается специ­альным образом: 00000000 00000000 00000000 00000000 (нулевой порядок и нулевая мантисса).

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

Диапазон и точность представления чисел зависят от числа разрядов, от­водимых под порядок и мантиссу. Обычно число в формате с плавающей за­пя­той занимает в памяти 4 (float) или 8 (double) байтов.

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

Числа с плавающей запятой в разных вычислительных машинах (ВМ) име­ли различные форматы. В настоящее время для всех ВМ рекомендован стандарт, разработанный международным центром стандартизации IEEE (In­stitute of Electrical and Electronics Engineers).Произносится «ай-трипл-и».

Стандарт IEEE 754

Рекомендуемый для всех ВМ формат представления чисел с плаваю­щей запятой определен стандартом IEEE 754. Этот стандарт был разработан с целью облегчить перенос программ с одного процессора на другие и нашел ши­рокое применение практически во всех процессорах и арифметических сопроцессорах.

Рис. 2.24. Основные форматы IEEE 754: а — одинарный; б — двойной

Стандарт определяет 32-битовый (одинарный) и 64-битовый (двойной) фор­маты (рис. 2.24) с 8- и 11-разрядным порядком соответственно. Самый левый бит хранит знак числа. Основанием сис­темы счисления является 2.

Смещение равно соответственно 127 и 1023.

Максимальный порядок, который может иметь число: 127 и 1023, минимальный: -126 и -1022.

Для повышения точности представления мантиссы используют прием скрытой единицы: поскольку в нормализованной мантиссе старшая цифра всегда равна 1, ее можно не хранить. Следовательно, при 4-хбайтовом пред­ставлении, мантисса фактически состоит из 24 разрядов. Скрытая единица при выполнении арифметических операций восстанавливается, а при записи результата удаляется.

Далее для простоты рассматривается только 4-байтовое представление вещественных чисел.

Пример 1: Число 1.0 хранится как 1* 2 0 :

00111111 10000000 00000000 00000000

(порядок выделен красным цветом)

Знак = 0, порядок = 0, смещенный порядок = 0+127 —> 01111111, значение мантиссы – скрытая единица.

Число -1.0 имеет такое же представление, только знак равен 1:

10111111 10000000 00000000 00000000

Пример 2: рассмотрим 4-х байтовый код числа 20.5:

20.5 = 10100.12 = 1.01001 * 2 4

Порядок (смещенный): 4+127 = 131 = 1000 00112

Мантисса: 101001 à 010010…0 (первая единица – скрытая, в конец мантиссы добавляются нули).

порядок мантисса

В 16-ом виде этот код будет выглядеть так: 41 A4 00 00.

Пример 3: рассмотрим код числа 0.3.

0.3 = 0.01001100110011… = 1.00110011… * 2 -2

При записи мантиссы она округляется. Поскольку первая цифра, которая отбрасывается равна 1, число округляется в большую сторону:

0011001 10011001 10011001 10011001 + 1 =

0011001 10011001 10011001 10011010

Порядок = -2 + 127 = 125 = 0111 11012

В результате получаем:

Разобъем код числа на четверки и запишем его в 16-ом виде: 3E99999A.

Следует иметь в виду, что в результате округления значение числа изме­няется и в результате мы получаем числа с определенной погрешностью.

Например число для числа 0.3 мы получаем код, соответствующий числу 0.300000012

Определим максимальное число и его точность при 4-хбай­товом пред­ставлении.

1 .1…1 * 2 127 2 * 2 127 3.4 * 10 38

Максимальное значение мантиссы:

1…1 (24 единицы) = 2 24 – 1 = 16777216, следовательно точность представления мантиссы 7 значащих цифр.

Источник

Кодирование и обработка в компьютере вещественных чисел

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

Ситуация радикальным образом меняется при представлении и обработке вещественных чисел. На математической числовой оси вещественные числа образуют непрерывное множество (континуум), т.е. два числа могут находиться сколь угодно близко друг к другу, и на любом отрезке содержится бесконечно много значений чисел. В машинном представлении количество возможных значений чисел конечно; для двоичной системы счисления оно определяется как 2 k , где k — количество двоичных разрядов в представлении мантиссы. Т.е. вещественные числа в компьютере заменяются их кодами, которые образуют конечное дискретное множество; каждый код оказывается представителем целого интервала значений континуума.

Из данного обстоятельства вытекают ряд следствий:

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

Следствие 2. Поскольку код вещественного числа в компьютере является приблизительным представителем многих чисел из интервала, то и результаты вычислений также будут заведомо неточными, содержащими неизбежную погрешность. В этом состоит главная особенность обработки вещественных чисел в компьютере — она всегда ведется с погрешностью (кстати, оценка этой погрешности — самостоятельная и непростая задача).

Следствие 3. Наряду с понятием наибольшего вещественного числа (из-за ограниченности разрядной сетки) появляется понятие наименьшего числа или машинного нуля. Например, в типе Real языка PASCAL любое десятичное число, по модулю меньшее 2,3∙10 -39 оказывается машинным нулем, т.е. считается равным 0 при сохранении и в операциях с ним. Таким образом, математическое понятие «0» как точное значение числа в компьютерном представлении заменяется понятием «машинный нуль» как значение числа меньшее некоторой определенной величины.

Как уже было сказано, основной формой представления кодов вещественных чисел в компьютере является двоичная нормализованная. При этом записываться и храниться в памяти компьютера должны все составляющие нормализованной формы (знак числа, мантисса, знак порядка и порядок), что требует нескольких ячеек памяти. Например, числа типа Real («вещественный») из языка PASCAL размещаются в 6 байтах, т.е. 48 двоичных разрядах. Непосредственное распределение компонентов нормализованного числа по разрядам определяется конструктивными особенностями компьютера и программным обеспечением. Ниже приведен пример размещения числа в двух ячейках памяти (32 разряда):

Поскольку значение мантиссы лежит в интервале 0,12М2 |X2| max возникнет переполнение, т.е. операция станет некорректной.

Источник

Читайте также:  Закрытие петель фабричным способом иглой по кругу
Оцените статью
Разные способы