Промежутки между смежными числами, которые можно выразить в представлении с плавающей точкой, в областях 2 и 6. не постоянны. Промежуток между числами +0,998 х 10" и +0,999 х 10" гораздо больше промежутка между числами +0,998 х 10° и +0,999 х 10°. Однако если промежутки между числом и его соседом выразить как процентное отношение от этого числа, большой разницы в промежутках не будет. Другими словами, относительная погрешность, полученная при округлении, приблизительно равна и для малых, и для больших чисел.
Выводы, сделанные для системы представления с трехразрядной мантиссой и двухразрядной экспонентой, справедливы и для других представлений чисел. При изменении числа разрядов в мантиссе или экспоненте просто сдвигаются границы областей 2 и 6, и меняется число представляемых единиц в этих областях. С увеличением числа разрядов в мантиссе увеличивается плотность элементов и, следовательно, точность приближения. С увеличением количества разрядов в экспоненте области 2 и 6 увеличиваются за счет уменьшения областей 1, 3, 5 и 7. В табл. Б.1 показаны приблизительные границы области 6 для десятичных чисел с плавающей точкой и различным количеством разрядов в мантиссе и экспоненте.
Таблица Б.1. Приблизительные верхняя и нижняя границы чисел с плавающей точкой
Количество разрядов в мантиссе |
Количество разрядов в экспоненте |
Нижняя граница |
Верхняя граница |
10~12 |
|||
1 0-102 |
10" |
||
! 0-Ю02 |
10999 |
||
1 О"1 °002 |
1 09999 |
||
ю-13 |
|||
! 0-юз |
10" |
||
Ю-1 ооз |
10999 |
||
Ю-1 оооз |
1 о9999 |
||
і 0-14 |
ю9 |
||
1 0-Ю4 |
10" |
||
Ю-1004 |
ю"9 |
||
Ю-10004 |
1 09999 |
||
10~Ю09 |
ю"9 |
||
Ю-1019 |
10999 |
Вариант такого представления применяется в компьютерах. Основа возведения в степень — 2, 4, 8 или 16, но не 10. В этом случае мантисса состоит из цепочки двоичных, четверичных, восьмеричных и шестнадцатеричных разрядов. Если крайний левый разряд равен 0, то все разряды можно сместить на один влево, а экспоненту уменьшить на 1, не меняя при этом значения числа (исключение составляет ситуация потери значимости). Мантисса с ненулевым крайним левым разрядом называется нормализованной.
Нормализованные числа обычно предпочитаются ненормализованным, поскольку существует только одна нормализованная форма, а ненормализованных форм может быть много. Примеры нормализованных чисел с плавающей точкой даны на рис. Б.2 для двух оснований степени. В этих примерах показана 16-разрядная мантисса (включая знаковый бит) и 7-разрядная экспонента. Точка находится слева от крайнего левого бита мантиссы и справа от экспоненты.
Рис. Б.2. Примеры нормализованных чисел с плавающей точкой
Стандарт IEEE 754
До 80-х годов каждый производитель поддерживал собственный формат чисел с плавающей точкой. Все они отличались друг от друга. Более того, в некоторых из них арифметические действия выполнялись неправильно, поскольку арифметика с плавающей точкой имеет некоторые тонкости, которые не очевидны для среднестатистического разработчика аппаратного обеспечения.
Чтобы изменить эту ситуацию, в конце 70-х годов институт IEEE учредил комиссию по стандартизации арифметики с плавающей точкой. Целью было не только дать возможность переносить данные с одного компьютера на другой, но и обеспечить разработчиков аппаратного обеспечения заведомо правильной моделью. В результате в 1985 г. вышел стандарт IEEE 754. В настоящее время большинство процессоров (в том числе Intel, SPARC и JVM) содержат команды с плавающей точкой, которые соответствуют этому стандарту. В отличие от многих стандартов, ставших плодом неудачных компромиссом и мало кого устраивавших, этот стандарт неплох, причем в значительной степени благодаря тому, что его изначально разрабатывал один человек, профессор математики университета Беркли Вильям Каган (William Kahan). Рассмотрим этот стандарт.