Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика учебное пособие часть 1.doc
Скачиваний:
31
Добавлен:
16.09.2019
Размер:
882.18 Кб
Скачать

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

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

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

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

В машинном представлении количество возможных значений чисел конечно: для двоичной системы оно определяется как 2k, где k – количество двоичных разрядов в представлении мантиссы.

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

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

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

если x1 > x2, то X1 X2;

если x1 = x2, то X1 = X2;

если x1 < x2, то X1X2;

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

В этом состоит главная особенность обработки вещественных чисел в компьютере – она всегда ведется с погрешностью (оценка этой погрешности – самостоятельная и непростая задача);

3) наряду с понятием наибольшего вещественного числа (из-за ограниченности разрядной сетки) появляется понятие наименьшего числа или машинного нуля.

Например, в типе Real языка Pascal любое число, по модулю меньше 2.310-39 оказывается машинным нулем, то есть считается равным 0 при сохранении и в операциях с ним.

Таким образом, понятие «0» как точное значение числа в компьютерном представлении заменяется понятием «машинный нуль» как значение числа меньше некоторой определенной величины.

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

Например, число типа Real в Pascal размещается в 6 байтах. Непосредственное распределение компонентов нормализованного числа по разрядам определяется конструктивными особенностями компьютера и программным обеспечением.

Например, возможно следующее распределение разрядов для размещения числа в 32 разрядах:

Н омер бита

31 30 29 28 27 26 25 24 23 … 1 0

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

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

Поскольку значение мантиссы, лежит в интервале 0.1(2) , ноль в разряде целых и разделитель десятичных разрядов в представление не включается, то есть мантисса содержит только цифры дробной части.

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

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

Для представленного выше примера размещения числа в 32-х битах, |X2max| = 0,1111 …1(2)  2 111111  2,147(10) 109 (в мантиссе 24 единицы).

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

Например, в языке Pascal определен вещественный тип Extended (10 байт), для которого точность мантиссы достигает 20 десятичных знаков и значение модуля порядка до 4932(10).

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