19
Представление чисел в Представление чисел в формате с плавающей формате с плавающей точкой точкой

Представление чисел в формате с плавающей точкой

Embed Size (px)

DESCRIPTION

Представление чисел в формате с плавающей точкой. - PowerPoint PPT Presentation

Citation preview

Представление Представление чисел в формате с чисел в формате с плавающей точкойплавающей точкой

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

Формат чисел с плавающей точкой

Способы представления чисел в памяти компьютера

Стандарт IEEE 754

Форматы стандарта IEEE

Представление мантиссы в стандарте IEEE

Представление порядка в стандарте IEEE

Смещенный порядок

Диапазон изменения чисел

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

Алгоритм представления числа с плавающей точкой

Примеры

Достоинства формата чисел с плавающей точкой

Недостатки формата чисел с плавающей точкой

Содержание

Этот способ представления опирается на нормализованную (экспоненциальную) запись действительных чисел:

A= mqn , гдеm – мантисса числа;q – основание системы счисления;n – порядок числа.Мантисса должна отвечать условию:

11

mn

Следовательно, мантисса должна быть правильной дробью, имеющей после запятой любую цифру, отличную от нуля:

0,052415 = 0, 52415 * 10-1

550000=0,55 * 106

Формат чисел с плавающей точкой

При записи числа выделяется определенное количество разрядов для хранения мантиссы, знака мантиссы, порядка и знака порядка:

знак порядка

знак мантиссы

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

. . . . . .

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

Способы представления чисел в памяти компьютера

( пример на след. слайде)

В памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (q =2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

Пример представления чисел в форме с плавающей точкой

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

1 байт 2 байт    3 байт   4 байт  

В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 — минус.

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

Форматы стандарта IEEE

одинарной точности (32 бита);

двойной точности (64 бита);

повышенной точности (80 бит).

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

Представление мантиссы в стандарте IEEE

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

1 <= s < 2

Представление порядка в стандарте IEEE Порядок числа хранится "смещенным", т.е. к нему

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

машинный порядок 0 1 2 … 127 128 … 254 255

истинный порядок -127 -126 -125 … 0 1 … 126 127

- для формата одинарной точности

Если обозначить машинный порядок МП, а истинный - ИП, то связь между ними выразится следующей формулой:

МП10 = ИП10 + 127 - в десятичной системе счисления МП2 = ИП2 + 11111112 - в двоичной системе счисления (127 = 11111112) При выполнении вычислений с плавающей точкой процессор это смещение учитывает. Для того, чтобы не хранить знак порядка и был придуман так называемый смещённый порядок.

Представление порядка в стандарте IEEE

(продолжение)

Диапазон изменения чисел

1. для чисел обычной точности максимальное значение порядка равно 11111112=127, следовательно, максимальное значение составит 2127≈0,17014118346*1039

Максимальное значение положительной мантиссы будет

223-1≈223≈107

(223=2(10*2,3) ≈10002,3≈10(3*2,3) ≈107)

2. для чисел двойной точности максимальное значение порядка равно 11111111112=1023, следовательно, максимальное значение составит

21023=0,898846567 * 10 308

Максимальное значение положительной мантиссы будет

252-1 ≈ 1015,6

(252=2(10*5,2) ≈10005,2≈10(3*5,2) ≈1015,6)

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

Одинарная точность Двойная точность

Количество битов в знаке 1 1

Количество битов в экспоненте (порядке)

8 11

Количество битов в мантиссе 23 52

Общее число битов 32 64

Смещение экспоненты 127 1023

Область значений экспоненты от -126 до +127 от -1022 до +1023

Самое маленькое нормализованное число

2-126 2-1022

Самое большое нормализованное число

≈2128 ≈21024

Диапазон десятичных дробей ≈ от 10-38 до 1038 ≈ от 10-308 до 10308

Самое маленькое ненормализованное число

≈10-45 ≈ 10-324

Примечание

Традиционные проблемы, связанные с числами с плавающей точкой — переполнение, потеря значимости и неинициализированные числа. Помимо нормализованных чисел в стандарте IEEE предусмотрено еще 4 типа чисел:

Тип числа Знак Порядок Мантисса

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

± 0 < exp < max любой набор битов

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

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

ноль ± 0 0

бесконечность ± max (все 1) 0

не число ± max (все 1) любой ненулевой набор битов

Алгоритм представления числа с плавающей точкой

1.перевести число из q - ичной системы счисления в двоичную;

2.представить двоичное число в нормализованной экспоненциальной форме;

3.рассчитать смещённый порядок числа;

4.разместить знак, порядок и мантиссу в соответствующие разряды сетки.

Пример 1Как будет выглядеть число 0,5 в памяти машины в нормализованном формате одинарной точности?1. 0,5 = 0,12 0,5

* 2

1,0

2. 0,12 = 1,0*2-1 (основание и порядок записаны в десятичной системе

счисления)3. СП = -1 + 127 = 126 (126 = 11111102)

4.31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

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

а Перепишем число в шестнадцатеричной системе счисления, предварительно разбив его побайтно:

0011 1111 0000 0000 0000 0000 0000 0000

В нормализованном формате с одинарной точностью число 0,5 будет 001111110000000000000000000000002 = 3F00000016 (см. далее)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

C 1 9 1 0 0 0 0

Пример 2 Представить число -18,125 в машинном виде с использованием 4 байтового представления.

1. Переводим целую часть: Переводим дробную часть:

18 2

0 9 2

1 4 2

0 2 2

0 1

0, 125*2

0 250*2

0 500*2

1 000-18,125 = -10010,0012

2. – 10010,0012 = - 1,0010001*24

или – 10010,0012 = -0,10010001*10100 (основание и порядок записаны в двоичной системе счисления)3. СП10=4 + 127=131 СП2 = 1002 + 11111112 = 100000112

4. в памяти машины число будет иметь вид:

В нормализованном формате с одинарной точностью число - 18,125 будет

110000011001000100000000000000002 = C191000016

Достоинствами представления чисел в формате с плавающей запятой считаются:

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

Примечание: не все ученые и разработчики программ и аппаратных средств оптимистично настроены по отношению к стандарту IEEE 754. Они считают, что главная ошибка самого подхода к математической обработке числовых данных на компьютере состоит в попытке воспроизвести на нем невозможное – объекты теоретической математики, такие как действительные числа и интервалы действительных чисел. Компьютеринг нуждается в принципиально новых математических конструкциях, которые более адекватно отражали бы как потребности практики, так и возможности компьютеров. И первым шагом должны стать признание некорректности стандарта IEEE 754, а затем и разработка новых стандартов обработки нецелочисленных данных.

К недостаткам представления чисел в формате с плавающей точкой можно отнести:

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

сложность алгоритмов реализации арифметических операций.