Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

С фиксированной запятой и с плавающей точкой.




Систему представления чисел с фиксированной запятой обозначают как P(b, t, f), где b – основание системы счисления, t – количество разрядов для записи числа, f - количество разрядов для записи дробной части.

Рассмотрим пример системы с фиксированной запятой Р(10, 4, 1); здесь b=10, t=4, f=1. Т.е. это Dec, общее количество разрядов для записи числа равно 4, под дробную часть отводится 1 знак. Минимальное число, которое можно записать в этой системе, равно -999.9, максимальное число равно +999.9, всего положительных чисел с нулём 10000, всего отрицательных чисел 9 999. Любое число из [ -1000; 1000] представимо в системе Р(10, 4, 1) с ошибкой ≤ 0.05

Пример. Пусть задано число x=865.54. Его представление в P(10, 4, 1) обозначим как p(x) = 865.5. Ошибка равна | x - p(x)| = 0.04. Относительная ошибка представления этого числа Е = | x - p(x)| /x = 0.04 / 865.54 = 0.000046213, что составляет º 0.004%.

Если х = 0.86554, то р(х) = 0.9 (произвели округление при записи числа в системе P(10, 4, 1)), относительная ошибка Е = 0.03446/0.86554 = 0.039813…, что составляет º3.98%.

Вывод: система P(b, t, f) образует равномерную сетку для представления вещественных чисел, но относительная ошибка при записи вещественных чисел в этой системе не является равномерной.

Система P(b, t, f) используется в современных ЭВМ только для записи целых чисел в двоичной системе (со знаком и без знака), то есть при b = 2, f = 0. Для записи целых чисел в современных компьютерах может отводиться, например, 8, 16 или 32 бита, т.е. t=8, 16, 32. Выделенные для записи чисел биты нумеруются справа налево, начиная с нуля. Если целое число со знаком, то старший бит хранит знак числа: 0 соответствует знаку плюс, 1 соответствует знаку минус.

Пример. Целые числа со знаком в системе Р(2, 8, 0). Для их записи отводится 8 бит. Старший (седьмой) бит содержит знак числа: 0 или 1. Вот как будет записано число +75 = 26+23 +21+20 в 8-битовом коде:

0100 1011.

Степени двойки в записи числа +75 указывают на то, что бит с соответствующим номером содержит 1.

 

7 бит (знак) 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0 бит
               

 

Для записи отрицательных целых чисел используется

дополнительный код. Правило для записи отрицательного числа (-N) в дополнительном коде:

1) записать двоичный код соответствующего положительного целого N и дополнить его слева до нужного числа битов нулями (до 8, или до 16,

или до 32 битов).

2) инвертировать полученный код (операция инверсии двоичного кода заключается в замене всех 0 на 1 и всех 1 на 0);

3) прибавить к младшему разряду инвертированного кода 1.

Полученный код и будет дополнительным кодом отрицательного числа (-

N).

Пример 1. Записать дополнительный 8 битовый код числа -95.

Решение: запишем 95 в двоичном коде: 95 = 64+16+8 +4+2+1 = 101 1111. Дополним этот код слева нулём (чтобы получилось 8 бит): 0101 1111. Инвертируем полученный код: 1010 0000. Прибавим 1 к младшему разряду данного кода: 1010 0001. Это и будет дополнительный двоичный код отрицательного числа -95. Для проверки сложим полученные коды:

+ 95: 0 1 0 1 1 1 1 1 -95: 1 0 1 0 0 0 0 1

сумма: (1) 0 0 0 0 0 0 0 0

Сумма единиц в 8-ом бите перешла в 9-ый бит, который отсутствует в записи числа – он теряется (говорят, что произошел перенос из знакового

бита), и сумма становится равной 0.

Максимальное положительное 8-ми битовое число 0111 1111 = +127. Восьми битовое число 1000 0001 = -127. Минимальное отрицательное 8-ми битовое равно 1000 0000 = -128. Т.е. диапазон однобайтовых целых чисел со знаком от -128 до +127. Всего с помощью 8-ми бит можно представить

256 чисел, т.е. 28.

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

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

Пример. Какое целое число со знаком записано в 8-ми битовом коде 1010 0011? Решение: Старший бит равен 1, значит это отрицательное число. Инвертируем данный код: 0101 1100; Прибавляем 1 к младшему разряду: 0101 1101. Переводим это число в Dec: 26+24+23+22+20 = 64+16+8+4+1 = 93. Т.е. заданный дополнительный код соответствует числу

-93.

В языке программирования Turbo Pascal используются, например, такие целые типы данных:

Тип данных Размер памяти Количество чисел Диапазон
Byte 1 байт 28 = 256 0..255
ShortInt 1 байт 28 = 256 -128.. 127
Word 2 байта 216 = 65 536 0.. 65 535
Integer 2 байта 216 = 65 536 -32 768.. 32 767

 

Пояснения к таблице. Типы ShortInt и Integer используются для записи целых со знаком, т.е. старший бит хранит знак числа; типы Byte и Word используются для записи целых без знака (неотрицательных); 1 байт = 8 бит; используя n бит можно записать 2n различных чисел (доказывается по индукции). Покажем, что максимальное число, которое можно

представить, используя n бит равно (2n – 1). Действительно, если имеется n бит для записи числа, то максимальное число получится в случае, когда

все разряды (биты) равны 1:

x =111.......114243 n раз

Если к этому числу прибавить 1, получим число:

x + =1 1000.......014243= 2 n ,

n раз

т.е. x = 2n -1.

Для правильной интерпретации содержимого памяти нужно знать, какой тип данных в ней храниться, т.к. по «внешнему виду» отличить один тип от другого нельзя. Пусть, например, 1 байт памяти содержит следующие данные: 1001 1101. Если это число типа Byte, то оно равно

27+24+23+22+20= 128+16+8+4+1=157. Если это целое число со знаком типа ShortInt, то для его определения надо инвертировать код: 0110 0010, затем прибавить 1: получим 0110 0011, т.е. 26+25+21+20= 64+32+2+1 = 99, значит, данный байт содержит число - 99.

Система представления чисел с плавающей точкой F(b, t, L, U). Такая система используется для записи вещественных чисел в современных ЭВМ. Здесь b – основание системы (для ЭВМ b равно 2), t - количество разрядов мантиссы, L, U – пределы изменений значений показателей порядка чисел в этой системе. Пример числа, записанного в виде числа с плавающей точкой: 0.31562781*105; здесь 0.31562781 – мантисса числа, 5 – его порядок. Это число в «обычной», позиционной записи выглядит как 31562.781. Такой способ представления чисел позволяет компактно записывать числа из широкого диапазона значений, например:

0.4671*10-15, или 0.8965*1012.

Числа системы F(b, t, L, U) имеют вид: x = ≤ M*bk, где M – мантисса числа x, b – основание системы счисления, k – порядок числа x.

Развёрнутая запись числа x:

d 1 d2 d3 dt k

x = ± (+ 2 + 3 +... + t) * b, (9.3) b b b b

или, более компактно:

x = ± 0.d d d.... d * b.1 2 3 t k (9.4)

Здесь d1 , d2 , d3 , …. dt - цифры системы счисления; они составляют мантиссу числа; t – разрядность мантиссы (количество знаков в мантиссе).

Должны выполняться следующие условия:

1) 1 ≤ d1 < b (первая цифра мантиссы не должна равняться нулю);

2) 0 ≤ di < b, i =2,3,…t;

3) L ≤ k ≤ U.

Если мантисса удовлетворяет первому условию, то говорят, что число представлено в нормализованном виде (с нормализованной мантиссой).

Запись нуля в системе F(b, t, L, U): 0.000…0* bL.

Утверждение 1. Система F(b, t, L, U) содержит

2*(b-1)*bt-1 *(U-L+1) +1 различных чисел.

Утверждение 2. Числа системы F(b, t, L, U) образуют неравномерную сетку, но относительная плотность этой сетки равномерна (всюду

одинакова).

Пример 1. Система F(10, 4, -2, 3). Здесь b=10, t=4, L= -2, U=3. Число x=865.54 в этой системе записывается в виде F(x) = 0.8655*103, а число y=0.86554 имеет вид F(y) = 0.8655*100. В обоих случаях относительная ошибка º 0.005%. Действительно,

| F(x) – x| /x =0.04/865.54 =4/86554;

| F(y) –y | /y = 0.00004/0.86554 = 4/86554.

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

Пример 2. Системы F(2, 3, -1, 2). Здесь b=2 (двоичная система), t=3, L= -1, U=2. Выпишем все положительные числа этой системы. Сначала заполним столбец числами порядка 20; числа из соседних столбцов получаются умножением (делением) на 2.

 

числа порядка 2-1 числа порядка 20 числа порядка 21 числа порядка 22
0.100 ~ 4/16 = ¼ 0.100 ~ 4/8 =1/2 0.100 ~ 4/4 =1 0.100 ~ 4/2 = 2
0.101 ~ 5/16 0.101 ~ 5/8 0.101 ~ 5/4 0.101 ~ 5/2 = 2.5
0.110 ~ 6/16 0.110 ~ 6/8 0.110 ~ 6/4 0.110 ~ 6/2 = 3
0.111 ~ 7/16 0.111 ~ 7/8 0.111 ~ 7/4 0.111 ~ 7/2 = 3.5

 

Систему счисления с плавающей точкой F(b, t, L, U) можно описать с

помощью чисел ε, σ, λ:

1) ε (машинное ε) – это минимальное положительное число, которое будучи сложенным с 1, даёт результат ≠ 1. Вычислим его. Т.к. ближайшее справа к 1 число это 0.1000..1*b, значит ε равно разности между этим числом и 1, т.е. ε = 0.10…1*b – 0.1*b = b1-t, для приведённого выше примера ε = ¼.

2) σ - минимальное положительное число системы F(b, t, L, U). Оно равно расстоянию между нулём и ближайшим к нему числом системы F(b, t, L, U). Это число представимо в виде: (минимальная мантисса) * bL: σ = 0.1*bL = bL-1, для приведённого выше примера σ = ¼;

3) λ – максимальное число системы F(b, t, L, U). Это число представимо в виде: λ = (максимальная мантисса) * bU, т.е. λ =

0.11…1*bU = bU*(1 – 0.00…1) = bU*(1-b-t). Для приведённого выше

примера λ= 3.5.

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

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

Для хранения знака мантиссы и знака порядка числа отводится по 1 биту; количество бит для хранения порядка и мантиссы зависит от выбранного типа представления данных. Например, если для хранения дробного числа отведено 32 бита, то их назначение может быть распределено следующим образом (в первой строке стоят номера битов, старший бит под номером 31 - знак числа, мантисса хранится в битах с номерами от 0 до 22, порядок числа в битах с номерами от 23 до 30):

 

      …..       …..    
Знак числа   Порядок числа     Мантисса  

 

Так как в нормализованной мантиссе двоичного числа в первой позиции всегда стоит единица, то хранят мантиссу, начиная со второго знака. Например, число 0.1101*25 хранится как 1.101*24, при этом единица целой части числа не хранится. Корректировка происходит при преобразовании числа или в ходе вычислений. При этом порядок дробного двоичного числа при хранении занимает 1 байт и изменяется в диапазоне от -127 до +128, а не от -128 до +127, как было бы в случае нормализованного представления чисел. Например, если надо записать число 0.11*2-127, то представляем его как 1.1*2-128; число 0.11011*2+128 =1.1011*2+127. Далее, чтобы порядок числа всегда был положительным к нему прибавляют 127, т.е. если порядок числа -10, то хранится +117. Порядок 100 хранится как 227. Такой способ записи порядка называют смещённым.

Примеры. 1. Как будет представлено в памяти компьютера число -

0.0625, если для его размещения выделено 32 бита памяти?

Решение: 0.0625 = 1/16 = 0.00012, т.е. -0.0625 = -0.1*2-3 = -1.0*2-4; смещенный порядок равен (-4+127) = 123, или в Bin 123 = 11110112; мантисса = 0 (все 23 бита). Старший бит равен 1, т.к. число отрицательное.

Окончательно получаем:

1 0111 1011 000 0000 0000 0000 0000 0000.

2. Запишите число 25 как число с плавающей запятой, используя 32 бита. Решение: 25 = 110012 = 1.1001*24. Смещённый порядок равен 4+127 = 131 или 100000112. Мантисса = 1001, окончательно получаем:

0 1000 0011 100 1000 0000 0000 0000 0000.

В языке TurboPascal существуют следующие типы данных для хранения вещественных чисел:

Тип данных Размер памяти Разрядн. мантиссы (бит) Порядок величин
Real 6 байт    
Single 4 байт   1038
Double 8 байт    
Extended 10 байт    

Очевидно, что множество вещественных чисел R значительно отличается от множества рациональных чисел, с которыми мы имеем дело в ЭВМ. Для чисел, представленных в ЭВМ можно указать наибольшее по модулю число А, такое что все остальные числа будут меньше, чем А. Кроме того, не выполняется свойство «всюду плотности» множества вещественных чисел, суть которого состоит в том, что для любых x, y (x < y) из множества R, можно указать значение z, такое, что x < z < y. Должна быть разработана теория «машинных» действительных чисел. Неточный перевод действительных чисел в двоичную систему и конечность разрядов, выделяемых для хранения чисел, служат источниками систематических ошибок при реализации многочисленных вычислительных методов на ЭВМ.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...