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

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

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

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;

}

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

Оставьте комментарий к статье