กลับไปหน้าบทความ

อ่าน 5 นาที

อัลกอริทึมการคูณของบูธ

1950 ในลอนดอน/พ.ศ. 2493 ในด้านวิทยาศาสตร์/การแนะนำตัวในปี 1950/เลขคณิตไบนารี/เบิร์คเบค มหาวิทยาลัยลอนดอน/อัลกอริธึมทางคณิตศาสตร์ของคอมพิวเตอร์/การคูณ/ใช้วันที่ dmy ตั้งแต่เดือนเมษายน 2022

อัลกอริทึมการคูณของ Boothเป็นอัลกอริทึมการ คูณที่คูณ เลขฐานสองที่มี เครื่องหมายสอง จำนวนในรูปแบบสองคอม พลี เมนต์ อัลกอริทึมนี้คิดค้นโดยAndrew Donald Boothในปี 1950...

อัลกอริทึมการคูณของบูธ

อัลกอริทึมการคูณของ Boothเป็นอัลกอริทึมการ คูณที่คูณ เลขฐานสองที่มี เครื่องหมายสอง จำนวนในรูปแบบสองคอม พลี เมนต์ อัลกอริทึมนี้คิดค้นโดยAndrew Donald Boothในปี 1950 ขณะทำการวิจัยเกี่ยวกับผลึกศาสตร์ที่Birkbeck CollegeในBloomsburyกรุงลอนดอน[ 1 ] อัลกอริทึมของ Booth มีความสำคัญในการศึกษาสถาปัตยกรรม คอมพิวเตอร์

อัลกอริทึม

อัลกอริทึมของ Booth ตรวจสอบคู่บิต ที่อยู่ติดกัน ของ ตัวคูณ NบิตYในการแสดงแบบสองคอมพลีเมนต์แบบมีเครื่องหมาย รวมถึงบิตโดยปริยายที่อยู่ต่ำกว่าบิตที่มีค่าน้อยที่สุด y = 0 สำหรับแต่ละบิตy สำหรับiที่วิ่งจาก 0 ถึงN − 1 จะพิจารณาบิตy และy ในกรณีที่บิตทั้งสองนี้เท่ากัน ตัวสะสมผลคูณPจะไม่เปลี่ยนแปลง ในกรณีที่y = 0 และ y = 1 ค่าตัวคูณคูณ 2 iจะถูกบวกเข้ากับPและในกรณีที่y = 1 และy = 0 ค่าตัวคูณคูณ 2 iจะถูกลบออกจากPค่าสุดท้ายของPคือผลคูณแบบมีเครื่องหมาย

การแสดงแทนของตัวคูณและผลคูณไม่ได้ระบุไว้ โดยทั่วไปแล้ว ทั้งสองอย่างจะอยู่ในรูปแบบสองส่วนเติมเต็มเช่นเดียวกับตัวคูณ แต่ระบบตัวเลขใดๆ ที่รองรับการบวกและการลบก็สามารถใช้งานได้เช่นกัน ดังที่กล่าวไว้ในที่นี้ ลำดับของขั้นตอนไม่ได้ถูกกำหนด โดยทั่วไปแล้ว จะดำเนินการจาก บิตที่มีค่าน้อยที่สุด (LSB)ไปยัง บิตที่มีค่ามากที่สุด (MSB)โดยเริ่มจากi = 0 การคูณด้วย 2i มักจะถูกแทนที่ด้วยการเลื่อนตัว สะสม Pไปทางขวาทีละน้อยระหว่างขั้นตอน บิตที่มีค่าน้อยสามารถเลื่อนออกไปได้ และการบวกและการลบในภายหลังสามารถทำได้เฉพาะกับ บิต N ที่มีค่าสูงสุด ของPเท่านั้น[ 2 ]มีรูปแบบและการปรับปรุงประสิทธิภาพมากมายในรายละเอียดเหล่านี้

โดยทั่วไปแล้ว อัลกอริทึมนี้จะถูกอธิบายว่าเป็นการแปลงสตริงของเลข 1 ในตัวคูณให้เป็น +1 ที่มีลำดับสูงกว่า และ −1 ที่มีลำดับต่ำกว่าที่ปลายสตริง เมื่อสตริงวิ่งผ่านบิตที่มีค่าสูงสุด (MSB) จะไม่มี +1 ที่มีลำดับสูงกว่า และผลลัพธ์สุทธิจะถูกตีความว่าเป็นค่าลบของค่าที่เหมาะสม

การใช้งานทั่วไป

เครื่องคำนวณเลขคณิต Walther WSR160 จากปี 1960 การหมุนด้ามหมุนแต่ละครั้งจะบวก(ขึ้น)หรือลบ(ลง)ค่าตัวเลขที่ตั้งไว้ในช่องด้านบนจากค่าในช่องสะสมด้านล่างการเลื่อนตัวบวกไปทางซ้ายหรือขวาจะคูณผลลัพธ์ด้วยสิบ

อัลกอริทึมของ Booth สามารถนำไปใช้ได้โดยการบวกค่าที่กำหนดไว้ล่วงหน้าสองค่าAและS ซ้ำๆ ( ด้วยการบวกเลขฐานสองแบบไม่มีเครื่องหมายทั่วไป) เข้ากับผลคูณP จากนั้นทำการ เลื่อนบิต ไป ทางขวาบนPให้mและrเป็นตัวตั้งคูณและตัวคูณตามลำดับ และให้xและyแทนจำนวนบิตในmและr

  1. กำหนดค่าของAและSและค่าเริ่มต้นของPตัวเลขทั้งหมดเหล่านี้ควรมีความยาวเท่ากับ ( x  +  y  + 1)
    1. A: เติมค่าm ลงในบิตที่มีนัยสำคัญที่สุด (ซ้ายสุด) ส่วนบิต ที่เหลืออีก ( y  + 1) บิต ให้เติมด้วยเลขศูนย์
    2. S: เติมบิตที่มีนัยสำคัญที่สุดด้วยค่าของ (− m ) ในรูปแบบเลขฐานสองแบบคอมพลีเมนต์ เติมบิตที่เหลือ ( y  + 1) บิตด้วยศูนย์
    3. P: เติมเลขศูนย์ลงในบิตที่มีค่ามากที่สุดxบิต จากนั้นเติมค่าของr ทางด้านขวาของ บิตที่มีค่าน้อยที่สุด (ขวาสุด) ด้วยเลขศูนย์
  2. ระบุบิต ที่ มีค่าน้อยที่สุดสองบิต (บิตขวาสุด) ของP
    1. ถ้าค่าเป็น 01 ให้หาค่าของP  +  Aไม่ต้องสนใจค่าที่เกินขีดจำกัด
    2. ถ้าค่าเป็น 10 ให้หาค่าของP  +  Sไม่ต้องสนใจค่าที่เกินขีดจำกัด
    3. ถ้าค่าเป็น 00 ไม่ต้องทำอะไร ให้ใช้Pโดยตรงในขั้นตอนถัดไป
    4. ถ้าอายุครบ 11 ปี ไม่ต้องทำอะไร ให้ใช้Pในขั้นตอนถัดไปโดยตรง
  3. เลื่อนค่าที่ได้ในขั้นตอนที่ 2 ไปทางขวาหนึ่งตำแหน่งโดยใช้การเลื่อนทางคณิตศาสตร์ ให้Pเท่ากับค่าใหม่นี้
  4. ทำซ้ำขั้นตอนที่ 2 และ 3 จนครบyครั้ง
  5. ตัดบิตที่มีค่าน้อยที่สุด ( บิตขวาสุด) ออกจากPนี่คือผลคูณของmและr

ตัวอย่าง

จงหาค่า 3 × (−4) โดยที่m = 3 และr = −4 และx = 4 และy = 4:

  • m = 0011, -m = 1101, r = 1100
  • A = 0011 0000 0
  • S = 1101 0000 0
  • P = 0000 1100 0
  • ทำซ้ำลูปสี่ครั้ง:
    1. P = 0000 110 0 0บิตสองบิตสุดท้ายคือ 00
      • P = 0000 0110 0. การเลื่อนเลขคณิตไปทางขวา
    2. P = 0000 011 0 0บิตสองบิตสุดท้ายคือ 00
      • P = 0000 0011 0. การเลื่อนเลขคณิตไปทางขวา
    3. P = 0000 001 1 0สองบิตสุดท้ายคือ 10
      • P = 1101 0011 0. P = P + S.
      • P = 1110 1001 1. การเลื่อนเลขคณิตไปทางขวา
    4. P = 1110 100 1 1 . สองบิตสุดท้ายคือ 11.
      • P = 1111 0100 1. การเลื่อนเลขคณิตไปทางขวา
  • ผลคูณคือ 1111 0100 ซึ่งก็คือ −12

เทคนิคที่กล่าวมาข้างต้นนั้นไม่เพียงพอเมื่อตัวคูณเป็นจำนวนลบที่สุดที่สามารถแสดงได้ (เช่น ถ้าตัวคูณมี 4 บิต ค่านี้จะเป็น −8) เนื่องจากจะเกิดการโอเวอร์โฟลว์เมื่อคำนวณ -m ซึ่งเป็นค่าลบของตัวคูณ ซึ่งจำเป็นสำหรับการกำหนดค่า S วิธีแก้ไขที่เป็นไปได้วิธีหนึ่งคือการขยาย A, S และ P ออกไปอีกหนึ่งบิต ในขณะที่ยังคงแสดงจำนวนเดียวกัน กล่าวคือ ในขณะที่ก่อนหน้านี้ −8 ถูกแทนด้วย 1000 ในสี่บิต ตอนนี้จะถูกแทนด้วย 11000 ใน 5 บิต จากนั้นจึงดำเนินการตามที่อธิบายไว้ข้างต้น โดยมีการปรับเปลี่ยนในการกำหนดจำนวนบิตของ A และ S เช่น ค่าของm ซึ่งเดิมกำหนดให้กับบิต xแรกของ A จะถูกขยายเป็นx + 1 บิต และกำหนดให้กับบิต x + 1 บิต แรกของ A ต่อไป ด้านล่างนี้ สาธิตเทคนิคที่ได้รับการปรับปรุงโดยการคูณ −8 ด้วย 2 โดยใช้ 4 บิตสำหรับตัวตั้งคูณและตัวคูณ:

  • A = 1 1000 0000 0
  • S = 0 1000 0000 0
  • P = 0 0000 0010 0
  • ทำซ้ำลูปสี่ครั้ง:
    1. P = 0 0000 001 0 0บิตสองบิตสุดท้ายคือ 00
      • P = 0 0000 0001 0. เลื่อนไปทางขวา
    2. P = 0 0000 000 1 0สองบิตสุดท้ายคือ 10
      • P = 0 1000 0001 0. P = P + S.
      • P = 0 0100 0000 1. เลื่อนไปทางขวา
    3. P = 0 0100 000 0 1บิตสองบิตสุดท้ายคือ 01
      • P = 1 1100 0000 1. P = P + A.
      • P = 1 1110 0000 0. เลื่อนไปทางขวา
    4. P = 1 1110 000 0 0บิตสองบิตสุดท้ายคือ 00
      • P = 1 1111 0000 0. เลื่อนไปทางขวา
  • ผลลัพธ์ที่ได้คือ 11110000 (หลังจากตัดบิตแรกและบิตสุดท้ายทิ้ง) ซึ่งก็คือ −16

วิธีการทำงาน

พิจารณาตัวคูณบวกที่ประกอบด้วยบล็อกของเลข 1 ล้อมรอบด้วยเลข 0 ตัวอย่างเช่น 00111110 ผลคูณจะคำนวณได้จากสูตร: โดยที่ M คือตัวตั้งคูณ จำนวนการคำนวณสามารถลดลงเหลือสองขั้นตอนได้โดยการเขียนใหม่เป็น

ในความเป็นจริง สามารถแสดงให้เห็นได้ว่าลำดับของเลข 1 ในระบบเลขฐานสองใดๆ สามารถแยกออกเป็นผลต่างของเลขฐานสองสองจำนวนได้:

ดังนั้น การคูณจึงสามารถแทนที่ได้ด้วยสตริงของเลขหนึ่งในจำนวนเดิมโดยใช้การดำเนินการที่ง่ายกว่า เช่น การบวกตัวคูณ การเลื่อนผลคูณย่อยที่เกิดขึ้นไปยังตำแหน่งที่เหมาะสม แล้วจึงลบตัวคูณออก วิธีนี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่าไม่จำเป็นต้องทำอะไรเลยนอกจากเลื่อนเมื่อจัดการกับเลข 0 ในตัวคูณไบนารี และคล้ายกับการใช้คุณสมบัติทางคณิตศาสตร์ที่ว่า 99 = 100 − 1 เมื่อคูณด้วย 99

รูปแบบนี้สามารถขยายไปใช้กับบล็อกเลข 1 จำนวนเท่าใดก็ได้ในตัวคูณ (รวมถึงกรณีที่มีเลข 1 เพียงตัวเดียวในบล็อก) ดังนั้น

อัลกอริทึมของบูธใช้รูปแบบเก่านี้ โดยทำการบวกเมื่อพบหลักแรกของกลุ่มเลขหนึ่ง (0 1) และทำการลบเมื่อพบหลักสุดท้ายของกลุ่ม (1 0) วิธีนี้ใช้ได้กับตัวคูณที่เป็นลบเช่นกัน เมื่อเลขหนึ่งในตัวคูณถูกจัดกลุ่มเป็นกลุ่มยาว อัลกอริทึมของบูธจะทำการบวกและลบน้อยกว่าอัลกอริทึมการคูณแบบปกติ

การใช้งานตัวคูณเพนเทียม

ไมโครโปรเซสเซอร์Pentium ของIntelใช้รูปแบบ radix-8 ของอัลกอริทึม Booth ในตัวคูณฮาร์ดแวร์ 64 บิต เนื่องจากวิธีการที่ใช้ในการคูณแบบ radix-8 จึงจำเป็นต้องมีวงจรเสริมที่ซับซ้อนเพื่อดำเนินการกรณีพิเศษของการคูณด้วย 3 ในลักษณะที่ลดความหน่วงให้น้อยที่สุด โดยการรวมการใช้carry-lookahead , carry-selectและ การ บวกKogge–Stone [ 3 ]

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • การเข้ารหัสบูธ Radix-4
  • การเข้ารหัสแบบ Booth ฐาน 8ในทฤษฎีเชิงรูปธรรมของ RTL และเลขคณิตคอมพิวเตอร์
  • โปรแกรมจำลอง JavaScript ของ Booth's Algorithm
  • การนำไปใช้งานในภาษา Python
  • การนำไปใช้งานในภาษา C++
  • การนำไปใช้งานในภาษาจาวา
  • ข้อดีของการใช้อัลกอริทึมของบูธ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Booth%27s_multiplication_algorithm&oldid=1359557102 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อัลกอริทึมการคูณของบูธ

อัลกอริทึมการคูณของ Boothเป็นอัลกอริทึมการ คูณที่คูณ เลขฐานสองที่มี เครื่องหมายสอง จำนวนในรูปแบบสองคอม พลี เมนต์ อัลกอริทึมนี้คิดค้นโดยAndrew Donald Boothในปี 1950...

อัลกอริทึม

อัลกอริทึมของ Booth ตรวจสอบคู่ บิต ที่อยู่ติดกัน ของ ตัวคูณ N บิต Y ในการแสดงแบบ สอง คอมพลีเมนต์แบบ มีเครื่องหมาย รวมถึงบิตโดยปริยายที่อยู่ต่ำกว่า บิตที่มีค่าน้อยที่สุด y = 0 สำหรับแต่ละบิต y สำหรับ i ที่วิ่งจาก 0 ถึง N − 1 จะพิจารณาบิต y และ y...

การใช้งานทั่วไป

อัลกอริทึมของ Booth สามารถนำไปใช้ได้โดยการบวกค่าที่กำหนดไว้ล่วงหน้าสองค่า A และ S ซ้ำๆ ( ด้วยการบวกเลขฐานสองแบบไม่มีเครื่องหมายทั่วไป) เข้ากับผลคูณ P จากนั้นทำการ เลื่อนบิต ไป ทางขวาบน P ให้ m และ r เป็น ตัวตั้งคูณ และ ตัวคูณ ตามลำดับ และให้ x และ y...

ตัวอย่าง

จงหาค่า 3 × (−4) โดยที่ m = 3 และ r = −4 และ x = 4 และ y = 4: