You are on page 1of 7

BM MMT-VT Khoa CNTT H KHTN

KTMT & HN

KIN TRC MY TNH V HP NG


GI LM PROJECT 1

BIU DIN S HC TRN MY TNH


GVHD: LVLONG

1. Biu din S nguyn ln


biu din s nguyn ln hn phm vi 4byte c nhiu cch. Trong hng dn ny
s gi cch biu din trong phm vi 8 byte khng du. T sinh vin c th
pht trin biu din cc s nguyn c du, trong phm vi ln hn ty .
Mt cch thng thng v n gin biu din s nguyn 8byte khng du. S
dng cu trc sau:

typedef struct BigInt


{
char bit[64];
}

- Cu trc trn s dng mng 1 chiu kiu char gm 64 phn t lu 64 bit ca s


nguyn 8 byte.
- Vi cch ny vic x l tnh ton kh n gin do vic truy xut dy bit trn mng 1
chiu kh d dng.
- Tuy nhin, cch biu din ny c hn ch v mt lu tr: s dng mng char 64
phn t biu din 64bit ca s nguyn dng 64 byte biu din 8 byte
lng ph vng nh.

-1-

BM MMT-VT Khoa CNTT H KHTN

KTMT & HN

- khc phc vn lng ph vng nh, ta c th khai bo cu trc kiu d liu mi


nh sau:
typedef struct BigInt
{
Int data[2];
}

(Sinh vin c th t nh ngha li 2 kiu d liu Dint (8byte) v Qint (16byte) cu


trc tng t nh trn.)
-

Kiu d liu trn s dng 64 bit tng ng vi mng 2 int biu din 64 bit ca s
nguyn 8 byte.

Vy lm sao biu din s nguyn 8 byte thnh kiu d liu BigInt. Ta cn gii
quyt ln lt cc vn sau:
+ Do s nguyn ln hn 4 byte nn khng th dng lnh scanf (%d,) c gi
tr va nhp ch c th c dy s va nhp bng cch c theo chui.
+ Lm sao chuyn i dy s dng chui v kiu BigInt? Ta c th gii quyt
bng thut ton hc (Tnh cc bit bng cch em dy s chia 2 v ly phn d), ta
c hm chuyn i chui s sang BigInt nh sau:

void StrToBigInt(string X, BigInt &a)


{
int i = 63; // bt u set bit ti v tr cui cng
while (X ! = "0")
{
int bit = (X[X.length()-1] - 48) % 2; // Tnh phn d
SetBit(a, i, bit); // To bit (bin bit) ti v tr bit i ca bin a
X=StrDiv2(X); // Chia chui s X cho 2
i--;
}
}

-2-

BM MMT-VT Khoa CNTT H KHTN


-

KTMT & HN

Hm to gi tr bit ti v tr bit i ca Kiu d liu BigInt

void SetBit(BigInt &a, int bit, int i)


{
// Ty theo v tr i ta quyt nh thao tc x l bit trn phn t no ca
// bin BigInt.
// VD: i = 31 thao tc bit th 31 ca a.data[0],
// i = 32 thao tc bit th 1 ca a.data[1]
}

Hm chia mt dy s nguyn dng chui cho 2


string StrDiv2(string X)
{
//Sinh vin t vit
}

xem c gi tr ca bin BigInt, ta xy dng hm xut gi tr bin BigInt ra


mn hnh nh sau:
void PrintBigInt(BigInt a)
{
/*
- Truy xut dy bit ca a v i n sang thp phn ( dng chui) theo thut ton
hc:
63
- S += 63
(tnh dng chui, c th nh ngha thm 2 hm: tnh kt qu
=0 2
ly tha 2^n dng chui, v hm nhn 2 chui vi nhau).
- Trong : S l s thp phn ca dy bit, bit_i l bit th i ca kiu d liu
BigInt.
- Print dy s thp phn ( dng chui) tm c ra mn hnh.
*/
}

(Sinh vin c thm file hng dn cc thao tc x l bit trn moodle)

-3-

BM MMT-VT Khoa CNTT H KHTN

KTMT & HN

2. Cc thao tc trn s nguyn ln


-

Cac hm tnh ton c vit theo phng thc Operator nh sau:


a. Hm tng 2 s BigInt
Bigint operator + (BigtInt a, Bigint b)
{
//...
}

Thc hin cng tng ng trn tng bit, v d cng 2 s 4 bit:

b. Hm hiu 2 s BigInt
Bigint operator - (BigtInt a, Bigint b)
{
//...
}

Nguyn tc c bn: a v php cng: A B = A + (-B) = A + (s b 2 ca B)

-4-

BM MMT-VT Khoa CNTT H KHTN


c. Hm tch 2 s BigInt
Bigint operator / (BigtInt a, Bigint b)
{
//...
}

THUT TON NHN 2 S KHNG DU

CI TIN NHN C DU:


-

Chuyn tha s 2 thnh s dng

Nhn theo thut ton nhn khng du

Nu khc du, i du

-5-

KTMT & HN

BM MMT-VT Khoa CNTT H KHTN

KTMT & HN

a. Hm thng 2 s BigInt

3.

Bigint operator * (BigtInt a, Bigint b)


{
//...
}Vit chng trnh minh ha:

THUT TON CHIA KHNG DU

CI TIN CHIA C DU:


-

Thc hin nh php chia khng du

Nus chiav sb chia khc du th i du thng

3. Biu din s chm ng vi chnh xc cao


S chm ng vi chnh xc Quadruple (gp 4 ln) (Qfloat) ln 128 bit c cu trc
nh sau:

S dng cu trc lu tr tng t nh BigInt lu cc bit d liu ca Qfloat.

-6-

BM MMT-VT Khoa CNTT H KHTN

KTMT & HN

Cch biu din: p dng cc bc chuyn i chm ng dng thp phn sang nh
phn. (Xem slide l thuyt)
-

Cc thut ton tnh ton: xem slide

Ngoi ra c th tham kho thm link sau: http://www.mecs-press.org/ijieeb/ijieebv6-n1/IJIEEB-V6-N1-1.pdf

-7-

You might also like