Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

 

При представления числа с плавающей точкой число в общем случае представляет собой смешанную дробь и имеет формат, приведенный на рис. 1.7-1.

 

1р. 2р. 3р. .... к р. «..» (к+1) р. (к+2) р. .... (n+1) р. n р

Рис. 1.7‑1

 

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

Поэтому в случае с плавающей точкой число Х представляется в виде двух частей:

мантиссам), отображающая запись числа - представляется в виде правильной дроби с форматом фиксированной точкой;

порядокп), отображающий местоположения в этой записи положение точки - представляется в виде целого числа с форматом фиксированной точки.

Количественная оценка числа Х определяется как

Х = qxп * хм. ,

где q - основание счисления.

Для двоичной системы счисления имеет место

Х = 2xп * хм.

При s- разрядном представлении модуля записи мантиссы и k-разрядном представлении модуля записи порядка форма с плавающей точкой обеспечивает диапазон изменения абсолютного значения числа А, для которого выполняется неравенство:

2ú хпúмах. *úхú м мах =2P *(1-2-S)>=úХú>= 0,

где P = 2k-1.

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

 

1>úxmú >=0.5.

 

Для плавающей точки максимальные значения абсолютной и относительной ошибок определяются следующим образом:

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

 

d max = D max / Аmin = 2-(s+1) * 2p /(хм мин*2p)= 2-(s+1) * 2p /(2-1 *2p)=

= 2-(s+1) /(2-1)= 2-s.

 

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

 

 

Операция сложения.

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

- выравнивание порядков;

- сложение мантисс операндов, имеющих одинаковые порядки;

- определение нарушения нормализации и при необходимости её устранение.

Пример

Найти разность С1 чисел А и В, представленных с плавающей точкой, если А и В представлены в виде порядков, соответственно [а п]пк и [в п] пк и мантисс, соответственно [а м] пк и [в м] пк,

где [а п]пк = 1.001, [а м] пк = 1.11001,

п] пк = 0.001, [в м] пкр= 0.11100.

При выполнении операций использовать дополнительный модифицированный код.

Решение

Начнем с выравнивания порядков.

Для этого из порядка первого числа вычитается порядок второго числа:

 

1.111 [а п]дк

+ 1.111 [-в п] дк

1.110 - разность порядков в дополнительном коде,

1.010 - разность порядков в прямом коде.

 

Так как знак разности порядков отрицательный, то в качестве общего порядка, а следовательно, и предварительного значения порядка искомого результата С1п`, берется порядок второго числа (вп). Для того чтобы взять в качестве порядка первого числа порядок второго числа, т.е. увеличив его порядок на 2, необходимо мантиссу этого меньшего числа умножить на 2-2, т.е. выполнить её арифметический сдвиг на два разряда вправо.

Таким образом, будем иметь после выравнивания следующую форму представления операндов:

 

м`] пк = 1.00110,

м`] пк = 0.11 1 00.

 

После выравнивания порядков можно определить предварительное значение мантиссы С1` как

 

С1` = [а м] пк ` - [в м] пк`.

11.1 1 01 0 -[а м`] мдк

+ 1 1.0 01 0 0 - [-в м`] мдк

110.1 1 1 1 0 - [С1’] мдк.

10.0 0 0 1 0 - [С1’] мпк,.

 

Из записи [С1`]дк, полученной после вычитания мантисс операндов с выравненными порядками, видно, что нормализация представления результата нарушена. Поэтому для данного примера необходимо выполнить этап устранения нарушения нормализации.

В данном случае нарушение нормализации слева от точки, так как получено [С1`]пк с не нулевой целой частью (неодинаковые разряды в поле знака использованного модифицированного дополнительного кода). Для того чтобы привести полученную предварительную мантиссу к нормализованной форме, достаточно её разделить на 2, то есть выполнить её арифметический сдвиг вправо. В результате будем иметь окончательное значение мантиссы:

С1 = С1` *2-1=10.00010*2-1= 11.10001.

Деление мантиссы С1` на 2 сопровождается изменением ранее найденного предварительного значения порядка результата С1п` на +1.

 

0 0.001 [с1 п] мпк `

+ 00.001 +1

00.010 [с1 п] мпк

 

После устранения нарушения нормализации окончательный результат будет иметь вид:

 

С1à{ [c1 п ] пк =00.010, [c1 м ] пк = 11.10001}.

 

Операция умножения

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

С2 =А * В

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

С2 =А*В= 2 а п * а м * 2 в п * вм =2 а п+вп * а м * вм =2 с2п *с2 м,

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

Таким образом, имеем:

С2п ` = а п п;

С2 м `= а м * вм.

Отсюда последовательность действий, обеспечивающих получение произведение двух чисел, заключается в следующем:

- определяется знак произведения как сумма по модулю два знаковых разрядов мантисс сомножителей;

- определяется предварительное значение порядка произведения посредством суммирования порядков сомножителей;

- определяется предварительное значение мантиссы произведения как произведения мантисс операндов;

- устраняется нарушение нормализации мантиссы произведения (если нарушение имеет место) соответствующей корректировкой предварительного значения порядка и мантиссы искомого произведения.

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

Пример

Найти произведение С2 числа А и В, представленных с плавающей точкой, если А и В представлены в виде порядков, соответственно [ап]пк и [вп]пк и мантисс, соответственно [ам] пк и [вм] пк,

где [ап]пк = 1.010, [а м]пк = 1.1010,

п]пк = 0.001, [в м]пкр= 0.1001.

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

Решение

Знак искомого произведения, представляемого знаком его мантиссы, отрицательный, так как знаки мантисс сомножителей неодинаковые.

Предварительное значение порядка произведения определяется следующим образом:

 

С2п*=а п п:

11. 101 [а п]мок

+ 00.001 п] мок

11.110 [С2 п`] мок

11.001 [С2 п`] мпк, т.е. [С2 п`] пк = 1.001.

 

Абсолютное значение предварительного значения мантиссы произведения определяется следующим образом:

 

[С2 м]*:

0.1010 -úа мú

* 0.1001 -úв мú

.0000 - начальное значение промежуточного произведения

+ 1010 - первый младший разряд множителя равен единицы

1010 - промежуточное произведение с учетом первого разряда

01010 - сдвинутое промежуточное произведение

001010 - второй разряд множителя равен нулю, поэтому выполняется

. только сдвиг

0001010 - третий разряд равен нулю, поэтому выполняется только сдвиг.

+ 1010 - четвертый разряд равен единицы

1011 010 - промежуточное произведение с учетом старшего разряда

01011 010 -сдвинутое промежуточное произведение.

Таким образом,

[С2 м`] пк = 0. 01011010,

с учетом округления имеем

[С2 м] = 0.1 011.

 

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

 

[С2 м]п = 1.1011.

[С2п]п = 1.010.

 

Операция деления.

С точки зрения формирования частного представления чисел с плавающей точкой поиск частного С3 =А/В сводится к поиску С3п и С3м, соответственно порядку и мантиссы частного на основании порядка ап и мантиссы ам делимого и порядка вп и мантиссы вм делителя. Учитывая общую запись чисел с плавающей точкой, произведение двух операндов представляется в виде

 

С2 = А/В = 2 а п * а м /(2 в п * вм) = 2 ап-вп *(а м / вм) = 2 сп м,

 

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

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

 

Пример

Найти частное С3 от деления чисел А на В, представленных с плавающей точкой, если А и В представлены в виде порядков, соответственно [ап]пк и [вп]пк и мантисс, соответственно [ам]пк и [вм]пк,

где [ап]пк = 1.010, [а м] пк = 1.1010,

п]пк = 0.001, [вм]пк= 0.1001.

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

Решение

Знак искомого произведения, представляемого знаком его мантиссы, отрицательный, так как знаки мантисс сомножителей не одинаковые.

Предварительное значение порядка [С3 п*] ок частного определяется следующим образом:

 

С3п`=а п - в п:

11.101 [а п]мок

+ 11.110 п] мок

111.011

+ 1

11.11 [С3 п`] мок, т.е. [С3п`] пк = 1.011.

11.12

 

Абсолютное значение предварительного значения мантиссы частного ищется за счет выполнения шести тактов деления следующим образом:

 

00.1010 -[úа м ú]ок ,

+ 11.0110 - [-úв мú]ок ,

100.0000

+ 1 - учет переноса (переполнения знакового поля) при сложении. в обратном коде,..

00.0001 - положительный остаток первого такта,

00.0010 - сдвинутый остаток,

+ 11.0110 - [-úв мú]мок ,

11.1000 - отрицательный остаток второго такта,

11.0001 - остаток после арифметического сдвига влево,

+ 0 0.1001 - [úв мú]мок ,

11.1010 - отрицательный остаток третьего такта,

11.0101 - остаток после арифметического сдвига влево,

+ 0 0.1001 - [úв мú]мок ,

11.1110 - отрицательный остаток четвертого такта,

11.1101 - остаток после арифметического сдвига влево,

. + 0 0.1001 - [úв мú]мок ,

100.0110

. + 1

00.0111 - положительный остаток пятого такта

00.1110 - остаток после арифметического сдвига влево,

+ 11.0110 - [-úв мú]мок ,

100.0100

+ 1

00.0101 - положительный остаток шестого такта,

00.1010 - остаток после арифметического сдвига влево.

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

[ú С3м`ú]п= 1. 00011,

с учетом округления:

[ú С3м`ú]п = 1. 0010.

Мантисса частного не нормализованная (нарушение нормализации слева от точки), поэтому необходимо сдвинуть мантиссу вправо на один разряд, а предварительное значение порядка частного увеличить на единицу. После нормализации окончательное значение мантиссы и порядка частного равны:

[С3 м]п = 0.1001,

[С3п]п = 0.000.

 

 

<== предыдущая лекция | следующая лекция ==>
Деление с фиксированной точкой | Представление данных в ЭВМ
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 1708; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.087 сек.