ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 6668

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

6 7 8

 Приложение Б. Числа с плавающей точкой

тельными числами

 хну

 существует действительное число

 z=(x+y)/2.

 Действи-

тельные числа формируют континуум.

Числа с плавающей точкой континуума не формируют. В двухзнаковой пя-

тиразрядной системе можно выразить ровно 179100 положительных чисел,

179100 отрицательных чисел и 0 (который можно выразить разными способами),

то есть всего 358201 чисел. Из бесконечного числа действительных чисел в ди-

апазоне от -10

+10

° до +0,999x10" в этой системе можно выразить только 358201

число. На рис. Б.1 эти числа показаны точками. Результат вычислений может

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

результат деления числа +0,100x10

3

 на 3 нельзя выразить

 точно

 в нашей системе

представления. Если полученное число нельзя выразить в используемой системе

представления, нужно брать ближайшее число, которое представимо в этой систе-

ме. Такой процесс называется

 округлением.

Промежутки между смежными числами, которые можно выразить в представле-

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

между числами +0,998x10" и +0,999x10" гораздо больше промежутка между числа-

ми +0,998x10° и +0,999x10°. Однако если промежутки между числом и его соседом

выразить как процентное отношение от этого числа, большой разницы в проме-

жутках не будет. Другими словами,

 относительная погрешность,

 полученная при

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

Выводы, сделанные для системы представления с трехразрядной мантиссой

и двухразрядной экспонентой, справедливы и для других систем представления

чисел. При изменении числа разрядов в мантиссе или экспоненте просто сдвига-

ются границы второй и шестой областей и меняется число представляемых единиц

в этих областях. С увеличением числа разрядов в мантиссе увеличивается плотность

элементов и, следовательно, точность приближений. С увеличением количества

разрядов в экспоненте размер областей 2 и 6 увеличивается за счет уменьшения

областей 1, 3, 5 и 7. В табл. Б.1 показаны приблизительные границы области 6

для десятичных чисел с плавающей точкой с различным количеством разрядов

в мантиссе и экспоненте.

Таблица Б.1

. Приблизительные верхняя и нижняя границы чисел с плавающей точкой

Количество разрядов Количество разрядов
в мантиссе в экспоненте

3 1
3 2
3 3
3 4

4 1
4 2
4 3
4 4

5 1
5 2
5 3
5 4

10 3

20 3

Нижняя

граница

ю-

12

Ю-102
Ю-1002

ю-

13

10-юз

1 Q-1OO3

Ю-'оооз

ю-'

4

Ю-104

1 0

~1°1

1 Q-10O9

Ю-1019

Верхняя

граница

10

9

10"

1Q999

10

9

10"

1Q999

Ю 9 9 9 9

10

9

10"

1Q999

1 П9999

1 уаааа

Ю

9

"

1Q999


background image

Принципы представления с плавающей точкой  6 7 9

Вариант такого представления применяется в компьютерах. Основа возведе-

ния в степень — 2,4,8 или 16, но не 10. В этом случае мантисса состоит из цепочки

двоичных, четверичных, восьмеричных и шестнадцатеричных разрядов. Если край-
ний левый разряд равен 0, все разряды можно сместить на один влево, а экспонен-
ту уменьшить на 1, не меняя при этом значения числа (исключение составляет
ситуация потери значимости). Мантисса с ненулевым крайним левым разрядом
называется нормализованной.

Нормализованные числа обычно предпочитаются ненормализованным, по-

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

даны на рис. Б.2. для двух основ возведения в степень. В этих примерах показана

16-битная мантисса (включая знаковый бит) и 7-битная экспонента. Запятая на-

ходится слева от крайнего левого бита мантиссы и справа от экспоненты.

Пример 1: Основа возведения в степень 2

к

 2"

2

 2~*

 2"

6

 2"

8

 2"

1 0

  2 '

1 2

  2 '

1 4

 2"

1 6

2

2

2"

5

|

 Z

7

\

 2

•э-9

2-

2"15

ll I I  J M I I I I I

i g

 0 1010100 0  0 0 0 0 0 0  0 0 0 0 1 1 0 1  1 = 2

2 0

 (1x2"

1 2

+1x2-

1 3

+1x2"

1 5

о. Знак Экспонента + 1„о-1б\ -лт?

1 + со смещением Мантисса: 1x2'

1 2

+1x2"

1 3

I 64(84-64=20) +1x2^ +1x2-«

Для приведения к нормализованному виду нужно сдвинуть мантиссу

го влево на 11 битов и  в ы ч е с т ь 11 из  э к с п о н е н т ы

Z

S  j g 0  1 0 0 1 0 0 1 1  1 0 1  1 0 0  0 0 0 0 0 0 0 0 0 =  2

9

  ( 1 х 2 '

1

  + 1 х 2 "

2

II Знак Экспонента

  М а н т и с с а :  1 X 2

- W 1 X

2

-

2

 + 1х2"

5

) = 432

5 + со смещением

 , .

§ • 73-64=9

  + 1 х 2  + 1 х 2

х

Пример 2: Основа возведения в степень 16

Щ

 16"

1

  1 6 "

2

  1 6 "

3

  1 6 "

4

|  / \  / \ /Л  / \

 5 3

gra

 0 1000101 0000 1011 QOQQ OQQQ

 = 16

5

 (1х  1 6 ^ В И б

4

) = 432

q о" Знак Экспонента ,
I* + со смещением Мантисса: 1х16"

3

+Вх1 б"

4

§• 69-64=5

х Для приведения к нормализованному виду нужно сдвинуть мантиссу

влево на 2 шестнадцатеричных разряда и вычесть 2 из экспоненты

1

| 0 1000011 0001 1011 0000 0000

 =16

3

 (1x16

1

+Вх16"

2

) = 432

|| Знак Экспонента мантисса: 1х16"

1+

Вх1 б"

2

q .§. + со смещением

а 67-64=3

Рис.

 Б.2. Примеры нормализованных чисел с плавающей точкой


background image

6 8 0 Приложение Б. Числа с плавающей точкой

Стандарт IEEE 754

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

Чтобы изменить эту ситуацию, в конце 70-х годов IEEE учредил комиссию для

стандартизации арифметики с плавающей точкой. Целью было не только дать воз-
можность переносить данные с одного компьютера на другой, но и обеспечить раз-
работчиков аппаратного обеспечения заведомо правильной моделью. В результа-
те получился стандарт IEEE 754 (IEEE, 1985). В настоящее время большинство
процессоров (в том числе Intel, SPARC и JVM) содержат команды с плавающей
точкой, которые соответствуют этому стандарту. В отличие от многих стандартов,
которые представляли собой неудачные компромиссы и мало кого устраивали, этот
стандарт неплох, в большей степени благодаря тому, что его изначально разраба-

тывал один человек, профессор математики университета Беркли Вильям Каган

(William Kahan). Этот стандарт будет описан ниже.

Стандарт определяет три формата: с одинарной точностью (32 бита), с удвоен-

ной точностью (64 бита) и с повышенной точностью (80 битов). Формат с повы-
шенной точностью предназначен для сокращения ошибок округления. Он приме-
няется главным образом в арифметических устройствах с плавающей точкой,
поэтому мы не будем о нем говорить. В форматах с одинарной и удвоенной точно-
стью применяется основание возведения в степень 2 для мантисс и смещенная экс-
понента. Форматы представлены на рис. Б.З.

Биты 1 8 23

Мантисса

Зн^к ^Экспонента

Биты  1 1 1  5 2

Экспонента

Мантисса

х

Знак

Рис. Б.З. Форматы для стандарта IEEE с плавающей точкой: одинарная точность (а);

удвоенная точность (б)

Оба формата начинаются со знакового бита для всего числа; 0 указывает на

положительное число, а 1 — на отрицательное. Затем следует смещенная экспо-
нента. Для формата одинарной точности смещение (excess) 127, а для формата
удвоенной точности смещение 1023. Минимальная (0) и максимальная (255 и 2047)


background image

Стандарт IEEE 754

 681

экспоненты не используются для нормализованных чисел. У них есть специаль-
ное предназначение, о котором мы поговорим ниже. В конце идут мантиссы по 23
и 52 бита соответственно.

Нормализованная мантисса начинается с двоичной запятой, за которой следует

1 бит, а затем остаток мантиссы. Следуя практике, начатой с компьютера PDP-11,

компьютерщики осознали, что 1 бит перед мантиссой сохранять не нужно, посколь-
ку можно просто предполагать, что он есть. Следовательно, стандарт определяет
мантиссу следующим образом. Она состоит из неявного бита, который всегда ра-
вен 1, неявной двоичной запятой, за которыми идут 23 или 52 произвольных бита.
Если все 23 или 52 бита мантиссы равны 0, то мантисса имеет значение 1,0. Если
все биты мантиссы равны 1, то числовое значение мантиссы немного меньше, чем
2,0. Во избежание путаницы в английском языке для обозначения комбинации из
неявного бита, неявной двоичной запятой и 23 или 52 явных битов вместо терми-
на «мантисса» (mantissa) используется термин significand. Все нормализованные
числа имеют significand

 s

 в диапазоне l<s<2.

Числовые характеристики стандарта IEEE для чисел с плавающей точкой даны

в табл. Б.2. В качестве примеров рассмотрим числа 0,5,1 и 1,5 в нормализованном
формате с одинарной точностью. Они представлены шестнадцатеричными числа-
ми 3F000000, 3F800000 и 3FC00000 соответственно.

Таблица Б.2.

 Характеристики чисел с плавающей точкой стандарта IEEE

Параметр Одинарная точность Удвоенная точность

Количество битов в знаке
Количество битов в экспоненте
Количество битов в мантиссе

Общее число битов
Смещение экспоненты
Область значений экспоненты
Самое маленькое нормализованное число
Самое большое нормализованное число
Диапазон десятичных дробей
Самое маленькое ненормализованное число

Традиционные проблемы, связанные с числами с плавающей точкой, — что

делать с переполнением, потерей значимости и неинициализированными числа-

ми. Подход, используемый в стандарте IEEE, отчасти заимствован от машины

CDC 6600. Помимо нормализованных чисел в стандарте предусмотрено еще 4 типа

чисел (рис. Б.4).

Проблема возникает в том случае, если абсолютное значение (модуль) резуль-

тата меньше самого маленького нормализованного числа с плавающей точкой, ко-
торое можно представить в этой системе. Раньше аппаратное обеспечение действо-
вало одним из двух способов: либо устанавливало результат на 0, либо вызывало
ошибку из-за потери значимости. Ни один из этих двух способов не является удов-
летворительным, поэтому в стандарт IEEE введены

 ненормализованные числа.

Эти числа имеют экспоненту 0 и мантиссу, представленную следующими 23 или

1

8
23
32
Смещение (excess) 127
От-126 до+127

2-126

= 2

1 2 8

=  1 0 -

м

д о 1 0

3 8

=ю-

4 5

1
11

52
64
Смещение (excess) 1023
от-1022до+1023

2-Ю22

_2

1

°24

И О"

308

 до 10

3 0 8

«ю-

3 2 4


background image

682

Приложение Б. Числа с плавающей точкой

±

0 < Ехр < Мах

Любой набор битов

52 битами. Неявный бит 1 слева от двоичной запятой превращается в 0. Ненорма-
лизованные числа можно легко отличить от нормализованных, поскольку у послед-
них не может быть экспоненты 0.

Нормализованное

число

Ненормализованное

число

Нуль

Бесконечность

Не число

±

0

Любой нулевой набор битов

±

0

0

±

1 1 1...1

0

±

1 1 1...1

Любой нулевой набор битов

\

Знаковый бит

Рис. Б.4. Числовые типы стандарта IEEE

Самое маленькое нормализованное число с одинарной точностью содержит 1

в экспоненте и 0 в мантиссе и представляет 1,0х2~

126

. Самое большое ненорма-

лизованное число содержит 0 в экспоненте и все единицы в мантиссе и представ-
ляет примерно 0,9999999х2~

127

, то есть почти то же самое число. Следует отметить,

что это число содержит только 23 бита значимости, а все нормализованные чис-
ла — 24 бита.

По мере уменьшения результата при дальнейших вычислениях экспонента по-

прежнему остается равной 0, а первые несколько битов мантиссы превращаются
в нули, что сокращает и значение, и число значимых битов мантиссы. Самое малень-
кое ненулевое ненормализованное содержит 1 в крайнем правом бите, а все ос-
тальные биты равны 0. Экспонента представляет 2~

127

, а мантисса — 2

 23

, поэтому

значение равно 2~

150

. Такая схема предусматривает постепенное исчезновение зна-

чимых разрядов, а не перескакивает на 0, когда результат нельзя выразить в виде
нормализованного числа.

В этой схеме присутствуют 2 нуля, положительный и отрицательный, опреде-

ляемые по знаковому биту. Оба имеют экспоненту 0 и мантиссу 0. Здесь тоже бит
слева от двоичной запятой по умолчанию 0, а не 1.

С переполнением нельзя справиться постепенно. Вместо этого существует спе-

циальное представление бесконечности: с экспонентой, содержащей все единицы,
и мантиссой, равной 0. Это число можно использовать в качестве операнда. Оно
подчиняется обычным математическим правилам для бесконечности. Например,
бесконечность и любое число в сумме дают бесконечность. Конечное число разде-

лить на бесконечность равно 0. Любое конечное число, разделенное на 0, стремит-
ся к бесконечности.

А что получится, если бесконечность разделить на бесконечность? Результат

не определен. Для такого случая существует другой специальный формат, NaN
(Not a Number — не число). Его тоже можно использовать в качестве операнда.