Дәріс 2: ем-дағы сандарды көрсету тәсілдері


Тікелей кодтағы жоғары сандардан сандарды көбейту



бет6/6
Дата11.10.2023
өлшемі167,25 Kb.
#113640
1   2   3   4   5   6
Тікелей кодтағы жоғары сандардан сандарды көбейту
Екі X және Y сандары тұрақты үтірмен көрсетілсін:

[X]пк = sign X.x1x2...xn – көбейтінді


[Y]пк = sign Y.y1y2...yn – көбейткіш
Көбейткіш түрінде елестетіп көрейік:

[Y]пк = sign Y. (y1*2-1 + y2*2-2 + ... + yn*2-n)


Сонда:
[Z]пк = [X]пк*[Y]пк = sign Z. |X| (y1*2-1 + y2*2-2 + ... + yn*2-n) =
= sign Z. (|X|*y1*2-1 + |X|*y2*2-2 + ... + |X|*yn*2-n) =
= sign Z. (|X|*2-1*y1 + |X|*2-2*y2 + ... + |X|*2-n*yn)
Бұл мультипликатордың жоғары сандарынан бастап екі санды көбейту алгоритмінің аналитикалық жазбасы.

Алгоритм:





  • Көбейтінді оңға 1 разрядқа жылжиды

  • Мультипликатор цифры талданады. Егер ол нөл болса, онда ішінара өнім қосылмайды, ал егер ол бір болса, онда ішінара өнім жалпы нәтижеге қосылады.

  • 1 және 2-тармақтар бойынша операциялардың реттілігі " N " рет жалғасады.

Туынды белгісі формула бойынша цифрлық бөлікті алуына қарамастан орналасады:



Мысал


Жалпы жағдайда дәл нәтиже алу үшін көбейткіштердің торларының биттерінің қосындысына тең разрядтар саны бар тор болуы керек екені анық.

Егер сіз өнімді 2-n-ден кем емес дәлдікпен алуыңыз керек болса, онда разряд торының екі есе емес, тек d = log2n разрядтарына көбейту жеткілікті


Тікелей кодтағы төменгі сандардан көбейту
Екі санның көбейтіндісіне өрнек сәл өзгертілген түрде жазайық, атап айтқанда:
[Z]пк = [X]пк*[Y]пк =
= sign Z.(|X|*y1*2-1 + |X|*y2*2-2 +... + |X|*yn*2-n) =
= sign Z.( |X|*2-1*y1 + 2-1 (|X|*2-1*y2 + 2-1 (|X|*2-1*y3 + (...)))) =
= sign Z. ((...(( |X|*yn*2-1 + |X|*yn-1)2-1 + |X|*yn-2)2-1 + ... +
+ |X|*y2 )2-1 + |X|*y1 )*2-1
Бұл өрнек Хорнер схемасы бойынша түрлендіру деп аталады және мультипликатордың төменгі разрядтарынан көбейту алгоритмін анықтайды.
Осылайша, көбейту үшін келесі әрекеттер тізбегі орындалуы керек:



  • Мультипликатордың кіші цифры талданады. Егер ол "1" - ге тең болса, онда көбейтінді шығарманың бір бөлігін қалыптастыруға қатысады. Әйтпесе-қатыспайды.

  • Алынған ішінара өнім оңға қарай 1 разрядқа жылжиды.

  • 1 және 2-тармақтар бойынша операциялар аға разрядқа дейін орындалады.

Мысал:




Ескерту.
Өнімді 2-n-ден төмен емес дәлдікпен алу үшін тек "n"– биттік тор болуы керек.
Сонымен, үлкендерден де,кішілерден де көбейту кезінде өнімді алу үшін екі микрооперацияны орындау қажет екенін көреміз: позициялық санау және сдысу жүйесіндегі сандарды қосу.
Алайда, сандарды әртүрлі кодтарда ұсынуға болатыны белгілі (бұл, ең алдымен, теріс сандар).
Біз сандарды қосу операциясының қалай орындалатынын білеміз (соның ішінде әртүрлі белгілермен).
Дегенмен, микроысу микрооперациясының кейбір ерекшеліктері бар:



Оңға жылжу:

Солға жылжу модуль бойынша біреуден аз болған жағдайда ғана мүмкін болады:
Бастапқы сандар:

Егер жылжыту орындалғанға дейін және жылжыту микрооперациясын орындағаннан кейін тікелей кодта жазылған белгілі бір санның өрнегін кері өзгертілген кодқа түрлендіру таза формальды түрде жасалса, онда:



Яғни, теріс санның оңға жылжуы кезінде жоғары разрядтар бірліктермен толтырылады. Солға қарай аға және кіші разрядтарға ауысқан кезде бірліктер жазылады.
Ұқсас ережелерді қолдана отырып, модификацияланған қосымша кодта теріс санды солға жылжытқанда, жылжыған санның төменгі биттерін нөлдермен толтыру керек екенін анықтау қиын емес.
Қосымша кодта төменгі сандардан көбейту
Алгоритм:

[Z]дк = (...(0+[X]дк*[yn+1 – yn])*2-1 + [X]дк*[yn – yn-1])*2-1 + ...


... + [X]дк*[y2 – y1])*2-1 + [X]дк*[y1 – y0]

Егер yn = yn+ 1 , онда ішінара өнімнің Жылжытуы жасалады.


Егер yn = 0 и yn+1 = 1, онда [X]дк ішінара өнімге қосылады
Егер yn = 1 и yn+1 = 0, онда [X]дк ішінара көбейтіндіден алынады.
Мысал:

Қосымша кодта жоғары сандардан көбейту
[Z]дк = [X]дк*[Y]дк = [X]дк*(y1 – y0 ) + [X]дк*(y2 – y1 )*2-1 + ... +
+ [X]дк*(yn+1 – yn )*2-n

[-X]дк = 1.01011


[Z]дк = [-X]дк + [X]*2-1 + [X]дк*2-2*0 + [-X]дк*2-3 +
+ [X]дк*2-4 + [-X]дк*2-5



+1.01011 [-X]дк
0.010101 [X]дк*2-1
________
+1.101011
1.11101011 [-X]дк*2-3
__________
+1.10010111
0.000010101 [X]дк*2-4
___________
+1.101000011
1.1111101011 [-X]дк*2-5
____________
1.1001110001
Жауап: [Z]дк = 1.1001110001

Достарыңызбен бөлісу:
1   2   3   4   5   6




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет