Числа с плавающей точкой - Внутреннее представление

Число в форме с плавающей точкой представляет собой совокупность знака, порядка и мантиссы. В машинном представлении чисел с плавающей точкой нулевой бит всегда несет информацию о знаке числа: 0 соответствует плюсу и 1 — минусу. Следующие 7 битов отведены под характеристику, являющуюся внутренней формой представления порядка. Остальное место занимает мантисса.

Знак. Числа с плавающей точкой, одинаковые по абсолютной величине, но имеющие разные знаки, отличаются друг от друга во внутреннем представлении лишь содержимым знакового разряда. Заметим, что в случае двоичной целочисленной арифметики дело обстояло совсем не так: отрицательные числа представлялись в дополнительном коде. Для умножения числа, представленного в форме с плавающей точкой, на —1 достаточно лишь изменить значение его знакового разряда. Мантисса чисел с плавающей точкой во внутреннем представлении фактически представляет собой абсолютную величину мантиссы. Умножив С380315Е на —1, мы получим 4380315Е.

Характеристика. Поскольку характеристика представлена 7-раз-рядным двоичным числом, ее значение может находиться в пределах от 00 до 7F16 или от 0 до 12710. Если бы в поле характеристики записывался в явном виде порядок числа, то мы имели бы числа исключительно с положительными порядками. Для того чтобы получить возможность пользоваться и числами с отрицательными порядками, в поле характеристики записывают число, превосходящее истинное значение порядка на 6410. Такое представление порядка называется представлением относительно числа 64. Минимальное значение характеристики равно 00000002. Минимальное значение порядка на 64 меньше, т. е. равно — 64. Аналогично, поскольку максимальное значение характеристики равно 12710, то, значит, в машине могут представляться лишь числа, порядок которых не превышает 6310. Итак, в машине представимы числа с плавающей точкой, находящиеся в интервале от 16-61 до 16+03, т. е. приблизительно от 5.4Х10-78 до 7.2X10'*.

Найти значение характеристики, соответствующее данному значению порядка, можно так: сначала преобразовать исходное значение порядка в двоичную форму, а затем, используя арифметику дополнительных кодов, прибавить к нему 6410 = Ю000002. Например, если порядок равен 1310, то характеристика вычисляется так:

1310+10000002=000 11012+10000002 = 100110112=3B16

Аналогично, если порядок равен — 5, то характеристика

—510+1000000a= 11110112+10000003=01110112=ЗВ1b

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

Мантисса. ЭВМ Систем 360 и 370 предоставляют возможность выполнения арифметических операций над числами с плавающей точкой двух форматов. Короткие числа с плавающей точкой занимают 32 разряда, т. е. полное слово памяти. Под знак и характеристику отведено 8 разрядов; таким образом, короткие числа имеют 24-разрядную мантиссу. Длинные числа с плавающей точкой состоят из 64-х битов, т. е. занимают двойное слово. Мантисса таких чисел содержит 56 битов.

В гл. 2 мы видели, что многие десятичные дроби не могут быть точно представлены в виде конечных двоичных. Например,

 110 = .00011001100110011...2 = . 19999999…16

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

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

Для ответа на этот вопрос выясним, насколько отличаются числа, не совпадающие только в последнем разряде. Если дробные части чисел состоят из N битов, то разница будет 2-N. Изменяя содержимое последнего разряда 4-разрядного дробного числа, мы изменим его величину на 2-4=1/16. Оценить соответствующую величину десятичного приращения можно, решив уравнение

10-x=2-N

Решить это уравнение можно, взяв десятичный логарифм от обеих частей:

—      х log10 = ~N log10 2; х = N log10 2

или приблизительно

x=0.3N

Возвращаясь к представлению чисел в виде коротких чисел с плавающей точкой, имеем x=0.3x24=7.2

Рис. 19.1. Короткий, длинный и расширенный форматы чисел с плавающей точкой. S — бит знака.

Итак, используя 24 разряда для представления мантиссы чисел, мы получаем относительную точность их машинного представления в пределах 10-7,2. Другими словами, относительная точность представления чисел в случае одинарной точности (короткие числа с плавающей точкой) равна приблизительно 10-7. Аналогичные вычисления показывают, что при операциях удвоенной точности (длинные числа) можно получить относительную точность представления приблизительно 10-18. Мы получили оценки точности, обеспечиваемой при машинном представлении чисел с плавающей точкой. В дальнейшем мы увидим, что ошибки округления, возникающие при использовании арифметики с плавающей точкой, могут быть столь велики, что конечные результаты практически теряют всякий смысл.

Модель 85 Системы 360 и модели Системы 370 позволяют оперировать с числами, представленными в так называемом расширенном формате. С помощью такого формата достигается еще более высокая точность. Число, записанное в расширенном формате, занимает четыре полных слова. Первое двойное слово имеет тот же формат, что и в случае длинного числа. Однако знак и характеристика относятся ко всему 128-разрядному числу. На самом деле для записи числа используются только 120 разрядов, поскольку содержимое полей знака и характеристики второго двойного слова игнорируется. Итак, мантисса таких чисел имеет 128—16=112 разрядов. При этом относительная точность повышается до 10-36.

На рис. 19.1 изображены все форматы представления чисел с плавающей точкой в машинах фирмы IBM. Как же определить число по его внутреннему представлению? Для ответа на этот вопрос число разбивается на три части. Рассмотрим, например, короткое число

Поскольку нулевой бит равен 0, число положительно. Характеристика равна 43,в=6710; вычитая 64, получим значение порядка, равное 3. Мантисса равна .00С00016. Таким образом, искомое значение получится переводом числа

.00С000Х163

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

.C00000X 161 = 1210

Аналогично число

А56С429В

отрицательно, поскольку нулевой бит равен 1. Характеристика равна 25lg=3710, т. е. порядок равен —27,0. Получаем, что представленное число равно

—.6С429Вх16-27

Точно так же определяются значения чисел, представленных в двойном и расширенном форматах. Единственное отличие заключается в длине мантиссы.

Нормализация. Число с плавающей точкой называется нормализованным, если первая шестнадцатеричная цифра его мантиссы отлична от 0. На самом деле в нормализованном виде числа представляются наиболее точно, поскольку реально используются все разряды мантиссы. Рассмотрим нормализованное представление в коротком формате числа .2. Оно выглядит так:

40333333

Точность чуть больше чем 10~7. В ненормализованном виде это же число может быть записано, например, как

43000333

В данном случае реально используется всего 12 из 24 двоичных разрядов мантиссы. Теперь уже точность представления оказывается меньше 10-4. Аналогичные рассуждения можно провести относительно длинных и расширенных чисел. Использование ненормализованных чисел обычно ведет к уменьшению общей точности вычислений.

Для нормализации числа нужно выполнят^ последовательные сдвиги его мантиссы на четыре двоичных разряда каждый раз с одновременным вычитанием 1 из характеристики до тех пор, пока первая шестнадцатеричная цифра мантиссы не окажется отличной от 0. Нормализовав длинное число

С5000638 4С8096Е5

получим

С26384С8 096Е5000

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



 
Статьи раздела