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

Автор работы: Пользователь скрыл имя, 10 Марта 2014 в 17:31, курсовая работа

Краткое описание

На вход ОА подаются входные (исходные) данные, а на выходе ОА формируются выходные данные (результат). На вход УА подается управляющая информация (например, код операции (КОП), сигнал разрешения чтения и тп.), а на выходе УА формируется выходная управляющая информация (например, сигнал готовности, сигнал ошибки и тп.). ОА и УА взаимосвязанны: от ОА к УА передаются сигналы признаков (условия) и в зависимости от этих условий от УА к ОА возвращается соответствующая микрокоманда. Синхронизация служит для управления работой всех синхронных узлов и деталей устройства.

Содержание

Введение-----------------------------------------------------------------------------------------------3
Описание алгоритма--------------------------------------------------------------------------------4
Блок-схема алгоритма операции сложения чисел ,с плавающей запятой в прямом коде -----------------------------------------------------------------------------------------------------5
Структура операционного устройства----------------------------------------------------------6
Схема --------------------------------------------------------------------------------------------------6
Таблица оповещающих, управляющих сигналов---------------------------------------------7
Моделирование работы алгоритма на ЭВМ----------------------------------------------------8
Отличительные черты разработки прграммы--------------------------------------------------8
Примеры-----------------------------------------------------------------------------------------------9
Приложения 1--------------------------------------------------------------------------------------------10
Библиографический список---------------------------------------------------------------------------14

Прикрепленные файлы: 1 файл

ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ.doc

— 188.00 Кб (Скачать документ)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

 

 

Омский государственный технический университет

 

 

Кафедра  Информатики и вычислительной техники

Специальность  «Информатика и вычислительная техника»

 

 

 

 

 

 

 

 

КУРСОВОЙ ПРОЕКТ

 

на тему: «Сложение чисел с плавающей запятой в прямом коде »

 

по дисциплине «Дискретная математика»

 

Студент  

Алейников Данил Евгеньевич                        группы ИВТ-127    

 

 

Пояснительная записка

 

                                               Шифр проекта


 

 

 

 

                                                                                                                   Руководитель проекта

                                                                                                                   Червенчук И.В.

                                                                                                                  

                                                                                                                            (Подпись, дата)


                                                                                                                  

                  

                                                                                     Алейников Д .Е.

 

                                                                                                                 (Подпись, дата)


 

 

 

 

 

 

 

 

Омск 2008

Содержание

 

 

 Введение-----------------------------------------------------------------------------------------------3

  1. Описание алгоритма--------------------------------------------------------------------------------4
  2. Блок-схема алгоритма операции сложения чисел ,с плавающей запятой в прямом коде -----------------------------------------------------------------------------------------------------5
  3. Структура операционного устройства----------------------------------------------------------6
  4. Схема --------------------------------------------------------------------------------------------------6
  5. Таблица оповещающих, управляющих сигналов---------------------------------------------7
  6. Моделирование работы алгоритма на ЭВМ----------------------------------------------------8
  7. Отличительные черты разработки прграммы--------------------------------------------------8
  8. Примеры-----------------------------------------------------------------------------------------------9

Приложения 1--------------------------------------------------------------------------------------------10

Библиографический список---------------------------------------------------------------------------14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

Каноническая структура синтеза синхронного вычислительного устройства состоит из двух автоматов – операционного (ОА) и управляющего (УА).

 

 

 




 

 



 





 

 

 

 

 

На вход ОА подаются входные (исходные) данные, а на выходе ОА формируются выходные данные (результат). На вход УА подается управляющая информация (например, код операции (КОП), сигнал разрешения чтения и тп.), а на выходе УА формируется выходная управляющая информация (например, сигнал готовности, сигнал ошибки и тп.). ОА и УА взаимосвязанны: от ОА к УА передаются сигналы признаков (условия) и в зависимости от этих условий от УА к ОА возвращается соответствующая микрокоманда. Синхронизация служит для управления работой всех синхронных узлов и деталей устройства.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Описание алгоритма

n-количество разрядов мантиссы,к - число разрядов порядка, M1, М2 - мантиссы и

P 2 Р1— порядки чисел.

Сложение мантисс выполняется на сумматоре мантисс SmM и возможно только при одинаковых порядках чисел. В связи с этим сначала нужно выровнять порядки, для чего на сумматоре порядков SmP определяется разность АР=P1 — Р2. Если АР = 0, то порядки равны (P1= Р2) и возможно сложение мантисс. При АР>0 первое число больше второго, и мантисса второго числа должна быть сдвинута на АР разрядов вправо. В случае АР<0 второе число больше первого. Следовательно, для выравнивания порядков необходимо сдвинуть на |A.Р| разрядов вправо мантиссу первого числа. Если  |A.Р| превосходит количество цифровых разрядов, то в качестве результата операции сложения принимается большее число.

При нахождении разности порядков может иметь место переполнение результата (SmP). Если переполнение положительное, то в качестве результата сложения должен быть принят первый операнд. Отрицательное переполнение сумматора порядков свидетельствует о том, что в качестве результата сложения должен быть принят второй операнд.

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Структура операционного устройства

 

3.1. сложение в прямом коде с плавающей запятой.

 

 

 

 

 

 

 

3.2 Таблица оповещающих, управляющих сигналов

 

 

Y1= Rg1M:=Ma

X1= SmP=0

Y2= Rg1P :=Pa

X2= SmP[1]=1

Y3= Rg2M:=Mb

X3= SmP[1]=0

Y4= Rg2P:=Pb

X5= SmM[2]=0

Y5= SmP:=Rg1P

X6= SmM=0

Y6= SmP:= Rg1P -Rg2P

 

Y7= Rg1P:=Rg1P+n

 

Y8= Rg2P:=Rg2P+n

 

Y9= SmP:=Rg2P

 

Y10= SmP:=SmP-1

 

Y11=Smm= Rg1M

 

Y12=Smm= Rg2M

 

Y13= Rg2M:= Rg2M>>

 

Y14= Rg1M:= Rg1M>>

 

Y15= SmM:= SmM<<

 

Y16= SmM:= Rg1M +Rg2M

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. Моделирование работы алгоритма на ЭВМ.

 

4.1 Отличительные черты разработки программы

Моделирование алгоритма умножения а дополнительном коде производилось на языке высокого уровня Turbo Pascal 7.0. Программа состоит из ряда процедур, функций и основного кода.

Процедуры и функции программы:

  1. Procedure vvod(a:integer ;var m:mass) – Задает с клавиатуры исходые массивы до элемента с номером «а».

 

  1. Procedure vivod(m:mass; a:integer)- Выводит на экран массив до элемента с номером «а».

 

  1. Procedure sloj(m1,m2:mass; q:integer; var sm:mass)- Складывает два массива по правилам двоичной арифметики.

 

  1. Procedure invert(m1:mass; a:integer; var m2:mass)- Инвертирует элементы массива.

 

  1. Procedure vi4it(m1,m2:mass; q:integer; var sm:mass)- Вычитает из первого массива второй.

 

  1. Procedure sdvigvlevo(sm1:mass; var sm2:mass)- Сдвигает массив влево на 1 разряд.

 

  1. Procedure okrug(m1:mass; var m2:mass)- Округляет массив.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.2 примеры

 

ma=0.1011 pa=0.101

mb=0.1000 pb=0.100

Ap=0.101+1.100=0.001

ma=0.1011

+

mb=0.0100

----------

mc=0.1111

pc=pa=0.101

 

 

ma=0.1010 pa=00.101

mb=0.1101 pb=11.011

Ap=00.101+00.101=01.010

 

mc=ma=0.1010

pc=pa=0.101

 

 

ma=1.0100 pa=0.100

mb=0.1100 pb=0.111

Ap=0.011

ma=1.1110

+

mb=0.1100

----------

mc=0.1010 pc=pb=0.111

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 1

Текст программы.

 

Program Kursovik;

Uses crt;

Type mass=array[1..11] of integer;

     mass1=array[1..5] of integer;

Const

qwe1:mass1=(0,0,0,0,0);

lm:mass1=(0,0,0,0,1);

qwe2:mass=(0,0,0,0,0,0,0,0,0,0,0);

Var  ch:char;

     n,buf,por,po,sdvigman,i:integer;

     Rg1M,Rg2M,SmM:mass;

   Rg1Par,Rg2Par,SmPar,smpred:mass1;

label l1,l2,l3,l4;

Procedure vvod(a:integer ;var m:mass);

Begin

For i:=1 to a do

read(m[i]); end;

 

Procedure vvod1(a:integer ;var m:mass1);

Begin

For i:=1 to a do

read(m[i]); end;

 

Procedure vivod(m:mass; a:integer);

Begin

For i:=1 to a do

write(m[i]); end;

 

Procedure vivod1(m:mass1; a:integer);

Begin

For i:=1 to a do

write(m[i]); end;

 

 

 

 

Procedure sloj(m1,m2:mass; q:integer; var sm:mass; var buv:integer);

var buf:integer;

a:mass;

Begin

buf:=0;

for i:=q downto 1 do begin

a[i]:=m1[i]+m2[i]+buf;

Case a[i] of

0:begin buf:=0; sm[i]:=0 end;

1:begin buf:=0; sm[i]:=1 end;

2:begin buf:=1; sm[i]:=0 end;

3:begin buf:=1; sm[i]:=1 end;

 

end; end;

buv:=buf;

end;

 

Procedure sloj1(m1,m2:mass1; q:integer; var sm:mass1);

var buf:integer;

a:mass1;

Begin

buf:=0;

for i:=q downto 1 do begin

a[i]:=m1[i]+m2[i]+buf;

Case a[i] of

0:begin buf:=0; sm[i]:=0 end;

1:begin buf:=0; sm[i]:=1 end;

2:begin buf:=1; sm[i]:=0 end;

3:begin buf:=1; sm[i]:=1 end;

end;

end;

end;

 

Procedure sloj2(m1,m2:mass1; q:integer; var sm:mass1; per:integer);

var buf:integer;

a:mass1;

Begin

buf:=0;

for i:=q downto 1 do begin

a[i]:=m1[i]+m2[i]+buf;

Case a[i] of

0:begin buf:=0; sm[i]:=0 end;

1:begin buf:=0; sm[i]:=1 end;

2:begin buf:=1; sm[i]:=0 end;

3:begin buf:=1; sm[i]:=1 end;

end;

end;

per:=buf;

end;

 

 

Procedure invert(m1:mass; a:integer; var m2:mass);

var i:integer;

Begin

for i:=1 to a do

if m1[i]=0 then m2[i]:=1 else m2[i]:=0; end;

 

Procedure invert1(m1:mass1; a:integer; var m2:mass1);

var i:integer;

Begin

for i:=1 to a do

if m1[i]=0 then m2[i]:=1 else m2[i]:=0; end;

 

 

 

Procedure vi4it1(m1,m2:mass1; q:integer; var sm:mass1);

Const dop:mass1=(0,0,0,0,1);

Begin

invert1(m2,5,m2);

sloj1(m2,dop,5,m2);

sloj1(m1,m2,5,sm); end;

 

Procedure vi4it2(m1,m2:mass1; q:integer; var sm:mass1;var perepolnenie:integer);

Const dop:mass1=(0,0,0,0,1);

Begin

invert1(m2,5,m2);

sloj1(m2,dop,5,m2);

sloj2(m1,m2,5,sm,perepolnenie); end;

 

 

 

Procedure sdvigvlevo(sm1:mass; var sm2:mass);

var j:integer;

begin

for j:=4 to 10 do

sm2[j]:=sm1[j+1];

sm2[11]:=0; end;

 

Begin

por:=0;

clrscr;

writeln('Vvedite mantissu 1-ogo 4isla');

vvod(11,rg1m);

writeln('Vvedite poryadok 1-ogo 4isla');

vvod1(5,rg1par);

writeln('Vvedite mantissu 2-ogo 4isla');

vvod(11,rg2m);

writeln('Vvedite poryadok 2-ogo 4isla');

vvod1(5,rg2par);

writeln('Press any key...');

readkey;

vi4it2(rg1par,rg2par,5,smpred,buf);

if buf=1 then begin

if smpred[1]=0 then begin smm:=rg1m; smpar:=rg1par; end

else begin smm:=rg2m; smpar:=rg2par; end;

goto l1;

end;

sdvigman:=smpred[5]+2*smpred[4]+4*smpred[3];{prav}

if sdvigman=0 then  smpar:=rg1par

else

begin

if smpred[1]=0 then begin

smpar:=rg1par;

po:=11-sdvigman;

for i:=4 to po do begin

rg2m[i+sdvigman]:=rg2m[i]

end;

for i:=1 to sdvigman do begin

rg2m[i+3]:=0;

end;

end

else

begin

smpar:=rg2par;

po:=11-sdvigman;

for i:=4 to po do begin

rg1m[i+sdvigman]:=rg1m[i]

end;

for i:=1 to sdvigman do begin

rg1m[i+3]:=0;

end;

end;

end;

sloj(rg1m,rg2m,11,smm,buf);  {prav}

n:=0;

l2:

if smm[4]=0 then

begin

sdvigvlevo(smm,smm);

vi4it2(smpar,lm,5,smpar,buf);

n:=n+1;

if n=11 then begin

smpar:=qwe1;    

goto l3;

end;

goto l2;

end;

if buf=1 then  begin

if smpar[1]=1 then  begin

smpar:=qwe1;

smm:=qwe2;

end

else begin writeln('beskone4nost'); goto l4; end;

end;

l1:

l3:

writeln;

write('Mantissa= ');

vivod(smm,11);

writeln;

write('Poryadok= ');

vivod1(smpar,5);

l4:

readkey;

end.

 

 

 

 

 

 

 

 

 

 

 

Список используемой литературы

 

  1. Операции двоичной и десятичной арифметики в ЭВМ: Метод. указания / Сост. Пальянов И.А.; Омск: ОмПИ, 1990. - 36 с.
  2. Моделирование на ЭВМ алгоритмов выполнения арифметических операций и синтез управляющих автоматов: Метод. указания / Сост. Пальянов И.А., Шафеева О.П.; Омск: ОмПИ, 1988. - 36 с.
  3. Б.Н. Иванов  Дискретная математика. Алгоритмы и программы: Учеб. пособие. – М.: Лаборатория Базовых Знаний, 2002 – 288 с.: ил. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 



Информация о работе Сложение чисел с плавающей запятой в прямом коде