Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория информации - курс лекций.doc
Скачиваний:
432
Добавлен:
13.03.2015
Размер:
4.65 Mб
Скачать

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

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

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

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

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

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

если , то;

если , то;

если , то.

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

  2. Математическое понятие «нуль» как точное значение числа заменяется в компьютерном представлении понятием «машинный нуль». Машинным нулем считаются числа со значениями, меньшими определенной величины. Например, в типеRealязыкаPASCALлюбое десятичное число, по модулю меньшееявляется машинным нулем, то есть считается равным нулю при хранении и в математических операциях.

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

32

31

30

29

28

27

26

25

24

23

2

1

1

0

0

1

0

1

0

1

1

0

0

1

Мантисса

Порядок числа

Рис. 3. Размещение вещественного нормализованного числа в ячейках памяти ЭВМ

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

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

Как и в случае целых чисел, для кодов вещественных чисел существует понятие переполнения, однако возникает оно не после заполнения разрядной сетки (это предотвращается нормализацией числа), а после заполнения всех разрядов порядка. Изначальной причиной погрешности в обработке кодов вещественных чисел является ограниченность разрядной сетки. Величина погрешности зависит от количества имеющихся разрядов. Уменьшить погрешность можно за счет расширения разрядной сетки, то есть выделения большего количества ячеек памяти для записи числа. Например, в языкеPASCALопределен вещественный типExtended, числа которого занимают по 10 байт (80 бит). Наличие нескольких вариантов представления вещественных чисел в языках программирования (различные вещественные типы) позволяет оптимизировать программу. Повышение точности вычислений требует больших ресурсов памяти; при этом возрастает время вычислений.