बूथ एल्गोरिदम एक गुणन एल्गोरिदम है जो 2 के पूरक संकेतन में दो साइन बाइनरी नंबरों को गुणा करता है। बूथ ने डेस्क कैलकुलेटर का उपयोग किया जो जोड़ की तुलना में शिफ्टिंग में तेज थे और उनकी गति बढ़ाने के लिए इस एल्गोरिदम का निर्माण किया।
एल्गोरिदम
शुरुआत गुणक को BR में और गुणनखंड को QR में रखें फिर एल्गोरिदम निम्न शर्तों के अनुसार काम करता है: 1. यदि Qn और Qn+1 समान हैं यानी 00 या 11 तो 1 बिट से अंकगणितीय शिफ्ट करें। 2. यदि Qn Qn+1 = 10 तो A = A + BR करें और 1 बिट से अंकगणितीय शिफ्ट करें। 3. यदि Qn Qn+1 = 01 तो A = A - BR करें और 1 बिट से अंकगणितीय शिफ्ट करें। अंत
उदाहरण कोड
#include<iostream> using namespace std; void add(int a[], int x[], int q); void complement(int a[], int n) { int i; int x[8] = { NULL }; x[0] = 1; for (i = 0; i < n; i++) { a[i] = (a[i] + 1) % 2; } add(a, x, n); } void add(int ac[], int x[], int q) { int i, c = 0; for (i = 0; i < q; i++) { ac[i] = ac[i] + x[i] + c; if (ac[i] > 1) { ac[i] = ac[i] % 2; c = 1; }else c = 0; } } void ashr(int ac[], int qr[], int &qn, int q) { int temp, i; temp = ac[0]; qn = qr[0]; cout << "\t\tashr\t\t"; for (i = 0; i < q - 1; i++) { ac[i] = ac[i + 1]; qr[i] = qr[i + 1]; } qr[q - 1] = temp; } void display(int ac[], int qr[], int qrn) { int i; for (i = qrn - 1; i >= 0; i--) cout << ac[i]; cout << " "; for (i = qrn - 1; i >= 0; i--) cout << qr[i]; } int main(int argc, char **argv) { int mt[10], br[10], qr[10], sc, ac[10] = { 0 }; int brn, qrn, i, qn, temp; cout << "\n--गुणक और गुणनखंड को साइन 2 के पूरक रूप में दर्ज करें यदि ऋणात्मक हो--"; cout << "\n गुणक बिट्स की संख्या="; cin >> brn; cout << "\nगुणक="; for (i = brn - 1; i >= 0; i--) cin >> br[i]; //गुणक for (i = brn - 1; i >= 0; i--) mt[i] = br[i]; complement(mt, brn); cout << "\nगुणनखंड बिट्स की संख्या="; cin >> qrn; sc = qrn; cout << "गुणनखंड="; for (i = qrn - 1; i >= 0; i--) cin >> qr[i]; qn = 0; temp = 0; cout << "qn\tq[n+1]\t\tBR\t\tAC\tQR\t\tsc\n"; cout << "\t\t\tप्रारंभिक\t\t"; display(ac, qr, qrn); cout << "\t\t" << sc << "\n"; while (sc != 0) { cout << qr[0] << "\t" << qn; if ((qn + qr[0]) == 1) { if (temp == 0) { add(ac, mt, qrn); cout << "\t\tBR घटा रहे हैं\t"; for (i = qrn - 1; i >= 0; i--) cout << ac[i]; temp = 1; } else if (temp == 1) { add(ac, br, qrn); cout << "\t\tBR जोड़ रहे हैं\t"; for (i = qrn - 1; i >= 0; i--) cout << ac[i]; temp = 0; } cout << "\n\t"; ashr(ac, qr, qn, qrn); } else if (qn - qr[0] == 0) ashr(ac, qr, qn, qrn); display(ac, qr, qrn); cout << "\t"; sc--; cout << "\t" << sc << "\n"; } cout << "परिणाम="; display(ac, qr, qrn); }
आउटपुट
--गुणक और गुणनखंड को साइन 2 के पूरक रूप में दर्ज करें यदि ऋणात्मक हो-- गुणक बिट्स की संख्या=5 गुणक=0 1 1 1 1 गुणनखंड बिट्स की संख्या=5 गुणनखंड=1 0 1 1 1 qn q[n+1] BR AC QR sc प्रारंभिक 00000 10111 5 1 0 BR घटा रहे हैं 10001 ashr 11000 11011 4 1 1 ashr 11100 01101 3 1 1 ashr 11110 00110 2 0 1 BR जोड़ रहे हैं 01101 ashr 00110 10011 1 1 0 BR घटा रहे हैं 10111 ashr 11011 11001 0 परिणाम=11011 11001