Моделювання машинного алгоритму виконання операцій ділення двійкових чисел

Моделювання машинного алгоритму виконання операцій ділення двійкових чисел – набуття практичних навичок машинного множення двійкових чисел.

1. Ознайомитись з способами машинного ділення двійкових чисел.

2. Розробити блок-схему алгоритму машинного ділення L – розрядних цілих двійкових чисел зі знаком відповідно до зазначеного способу ділення та виду коду представлення двійкових чисел.

3. Розробити програму для реалізації розробленої блок-схеми, прорахувати контрольний приклад.

4. Зробити висновки по роботі, обрахувавши апаратні витрати та часову складність запропонованого алгоритму.

clip_image002

Структурна схема реалізації операції ділення

Діями даної схеми керує блок управління, функціонування якого реалізується по відповідному алгоритму ділення двійкових чисел.

Затрати часу на виконання операції ділення можна визначити за формулою:

clip_image004, де n – довжина розряду сітки; tзс – час виконання зсуву на один розряд; tдод – час виконання операції додавання; Р – ймовірність появи нулів в розрядах частки.

Блок-схема алгоритму

clip_image006
Текст програми

#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

#using <mscorlib.dll>

using namespace System;

int _tmain()

{

int A[9],B[9],Bd[9],C[16],R[8];

int max=255,a,b,bi,r,i,j,p,t,*P;

printf ("\nvvedite a, b (Ne bilshi 255)\n");

scanf("%d%d",&a,&b);

if ((a>max)||(b>max)) { printf("Nepravilno zadani umovi ( >255 )\n"); a=div(a,max+1).rem; b=div(b,max+1).rem;

printf("a=%d, b=%d",a,b); }

if (a>b) { printf("Nepravilno zadani umovi ( A > B )\n"); return(1);}

j=(max+1);

A[0]=a; B[0]=b;

//dopovnyaln kod!!!!

for (int i=8;i>0;i–)

{

j=j/2;

if (A[0]>=j)

{

A[0]=A[0]-j; A[i]=1;

}

else

{

A[i]=0;

}

if (B[0]>=j)

{

B[0]=B[0]-j;

B[i]=1;

}

else

{

B[i]=0;

}

C[i]=0;

C[i+8]=0;

}

for(int i=8;i>0;i–)

{

Bd[i] = 1 – B[i];

}

int carryB = 0;

if(B[0]==1)

{

carryB = 1;

}

Bd[0] = 1 – Bd[0];

for(int i=1;i<8;i++)

{

if(carryB==1)

{

if(Bd[i]==1)

{

carryB = 1;

}

else

{

carryB = 0;

}

Bd[i] = 1-Bd[i];

}

}

for(int i=0;i<8;i++)

{

printf("%d %d\n",A[i],B[i]);

}

printf("\n");

for(int x = 0; x<8;x++)

{

R[x] = A[x];

}

for(int y=0; y<8;y++)

{

int carry = 0;

for(int x=1; x<8;x++)

{

int r = R[x] + Bd[x]+carry;

if(r>1)

{

r = 3-r;

carry = 1;

}

else

{

carry = 0;

}

R[x] = r;

}

if(R[7]>0)

{

C[y] = 1;

}

else

{

C[y] = 0;

carry = 0;

for(int x=1; x<8;x++)

{

int r = R[x] + B[x]+carry;

if(r>1)

{

r = 3-r;

carry = 1;

}

else

{

carry = 0;

}

R[x] = r;

}

}

}

printf("%d",0);

printf(".");

for (p=1;p<8;p++)

{

printf("%d",C[p]);

}

return 0;

}

Висновок: по виконанню даної  роботи було розроблено алгоритм машинного ділення двійкових чисел без відновлення остачі, розроблено програму реалізації даного методу та прораховано контрольний приклад.

Добавить комментарий

Your email address will not be published.

Previous Story

Моделювання методів паралельного кодування оптичної інформації

Next Story

Моделювання машинного алгоритму виконання операцій множення двійкових чисел

Latest from Моделювання