Кодирование вещественных чисел. Нормализованное представление числа
В компьютерной технике вещественными называются числа, имеющие дробную часть.
Дробные числа могут содержать большой набор цифр. Например: 0.0000345 или 10900000 (т.е очень большие или очень маленькие числа). Для удобства вещественные числа приводят к виду так называемого нормализованного представления числа. Заключается такое представление в том, что число записывается в виде произведения на основание системы счисления, возведенное в ту или иную степень. Например, предыдущие два числа в нормализованном виде будут выглядеть так: 0.345 * 10-4 и 0.109 * 108. Здесь числа 0.345 и 0.109 – мантиссы вещественных чисел, 10 – основание системы счисления, а -4 и 8 – порядки. При этом запятая (точка), разделяющая дробную и целую части ставится перед первой значащей цифрой (отличной от 0).
Нормализованная форма числа является наиболее удобной для представления дробных чисел в компьютере.
Понятно, что нормализированное представление используется не только для десятичной системы счисления. Вот примеры нормализованных записей дробных чисел в двоичной системе счисления:
101.11 = 0.10111 * 211
0.001 = 0.1 * 2-10
Здесь степени 11 и 10 – это двоичная форма десятичных чисел 3 и 2.
Нормализованная форма представления числа – это одна из форм множества вариантов экспоненциальной формы записи числа.
Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита.
Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.
Порядок числа, представленного в формате с плавающей точкой, изменяется в диапазоне от -128 до +127 и запоминается увеличенным на 128. Такой способ представления порядка называется смещенным.
Следует иметь в виду, что, хотя для мантиссы отведено 23 разряда для чисел одинарной точности и 55 разрядов – для чисел двойной точности, в операциях участвует 24 и 56 разрядов соответственно, т.к. старший разряд мантиссы нормализированного числа не хранится, т.е. имеет место так называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается. Порядок числа также учитывает скрытый старший разряд мантиссы.
Нормализованная мантисса в двоичной системе счисления всегда представляется десятичным числом m, лежащим в диапазоне 0,5 <= m < 1.
Пример представления числа в формате с плавающей точкой:
0.110 = 0.000(1100)2 = 0.(1100)2*2-3
-310 = (-3 + gelleruri128)10 = 011111012.
Если мантисса представлена бесконечной периодической дробью, то последний учитываемый разряд мантиссы округляется.
-49.510 = -110001.1002 = -0.11000112*26
610 = (6 + 128)10 = 100001102.
При выполнении арифметических операций над числами, представленными в формате с плавающей точкой, надо отдельно выполнять их для порядков и мантисс. При алгебраическом сложении чисел надо сначала уравнять порядки слагаемых. При умножении порядки надо складывать, а мантиссы — перемножать. При делении из порядка делимого вычитают порядок делителя, а над мантиссами совершают обычную операцию деления. После выполнения операций, если это необходимо, проводят нормализацию результата, что влечет изменение порядков, т.к. каждый сдвиг на один разряд влево соответствует уменьшению порядка на единицу, а сдвиг вправо увеличению на единицу. Введение термина «плавающая точка» как раз и объясняется тем, что двоичный порядок, определяющий фактическое положение точки в изображении числа, корректируется после выполнения каждой арифметической операции, т.е. точка в изображении числа «плавает» (изменяется ее положение) по мере изменения данной величины. А в изображении чисел, представленных в формате с фиксированной точкой, она жестко зафиксирована в определенном месте.
Арифметические операции с числами, представленными в формате с плавающей точкой, намного сложнее таких же операций для чисел, представленных в формате с фиксированной точкой. Но зато плавающая точка позволяет производить операции масштабирования автоматически в самой машине и избавляет от накопления абсолютной погрешности при вычислениях (хотя не избавляет от накопления относительной погрешности).
Двоично-десятичный код
Двоично-десятичный код (англ. binary-coded decimal), BCD, 8421-BCD — форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырёхбитного двоичного кода.
Например, десятичное число 31110 будет записано в двоичной системе счисления в двоичном коде как 1 0011 01112, а в двоично-десятичном коде как 0011 0001 0001BCD.
Описание[править | править вики-текст]
При помощи четырех бит можно закодировать шестнадцать цифр. Из них используются 10. Остальные 6 комбинаций в двоично-десятичном коде являются запрещенными. Таблица соответствия двоично-десятичного кода и десятичных цифр:
Двоично-десятичный код также применяется в телефонной связи. В этом случае кроме десятичных цифр кодируются символы '*' или '#' или любые другие. Для записи этих символов в двоично-десятичном коде используются запрещенные комбинации:
Преимущества и недостатки[править | править вики-текст]
Преимущества[править | править вики-текст]
Часы с двоично-десятичной системой индикации. В этих часах каждая колонка отображает десятичное число в двоично-десятичной системе.
· Упрощён вывод чисел на индикацию — вместо последовательного деления на 10 требуется просто вывести на индикацию каждый полубайт. Аналогично, проще ввод данных с цифровой клавиатуры.
· Для дробных чисел (как с фиксированной, так и с плавающей запятой) при переводе в человекочитаемый десятичный формат и наоборот не теряется точность.
· Упрощены умножение и деление на 10, а также округление.
По этим причинам двоично-десятичный формат применяется в калькуляторах — калькулятор в простейших арифметических операциях должен выводить в точности такой же результат, какой подсчитает человек на бумаге.
Недостатки[править | править вики-текст]
· Требует больше памяти.
· Усложнены арифметические операции. Так как в 8421-BCD используются только 10 возможных комбинаций 4-х битового поля вместо 16, существуют запрещённые комбинации битов: 1010(1010), 1011(1110), 1100(1210), 1101(1310), 1110(1410) и 1111(1510).
Поэтому, при сложении и вычитании чисел формата 8421-BCD действуют следующие правила:
1. При сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить корректирующее значение 0110 (= 610 = 1610 — 1010: разница количеств комбинаций полубайта и используемых значений).
2. При сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация, необходимо к каждой недопустимой комбинации добавить корректирующее значение 0110 с разрешением переноса в старшие полубайты.
3. При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.