Автор работы: Пользователь скрыл имя, 10 Марта 2014 в 17:31, курсовая работа
На вход ОА подаются входные (исходные) данные, а на выходе ОА формируются выходные данные (результат). На вход УА подается управляющая информация (например, код операции (КОП), сигнал разрешения чтения и тп.), а на выходе УА формируется выходная управляющая информация (например, сигнал готовности, сигнал ошибки и тп.). ОА и УА взаимосвязанны: от ОА к УА передаются сигналы признаков (условия) и в зависимости от этих условий от УА к ОА возвращается соответствующая микрокоманда. Синхронизация служит для управления работой всех синхронных узлов и деталей устройства.
Введение-----------------------------------------------------------------------------------------------3
Описание алгоритма--------------------------------------------------------------------------------4
Блок-схема алгоритма операции сложения чисел ,с плавающей запятой в прямом коде -----------------------------------------------------------------------------------------------------5
Структура операционного устройства----------------------------------------------------------6
Схема --------------------------------------------------------------------------------------------------6
Таблица оповещающих, управляющих сигналов---------------------------------------------7
Моделирование работы алгоритма на ЭВМ----------------------------------------------------8
Отличительные черты разработки прграммы--------------------------------------------------8
Примеры-----------------------------------------------------------------------------------------------9
Приложения 1--------------------------------------------------------------------------------------------10
Библиографический список---------------------------------------------------------------------------14
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Омский государственный технический университет
Кафедра Информатики и вычислительной техники
Специальность «Информатика и вычислительная техника»
КУРСОВОЙ ПРОЕКТ
на тему: «Сложение чисел с плавающей запятой в прямом коде »
по дисциплине «Дискретная математика»
Студент
Алейников Данил Евгеньевич группы ИВТ-127
Пояснительная записка
Шифр проекта
Омск 2008
Содержание
Введение---------------------
Приложения 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 |
4.1 Отличительные черты разработки программы
Моделирование алгоритма умножения а дополнительном коде производилось на языке высокого уровня Turbo Pascal 7.0. Программа состоит из ряда процедур, функций и основного кода.
Процедуры и функции программы:
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,
Var ch:char;
n,buf,por,po,sdvigman,i:
Rg1M,Rg2M,SmM:mass;
Rg1Par,Rg2Par,SmPar,smpred:
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)
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,
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[
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.
Список используемой литературы
Информация о работе Сложение чисел с плавающей запятой в прямом коде