คำถามติดแท็ก arithmetic-division

6
เหตุใดการแบ่งฮาร์ดแวร์จึงใช้เวลานานกว่าการคูณ
เหตุใดการแบ่งฮาร์ดแวร์จึงใช้เวลานานกว่าการคูณบนไมโครคอนโทรลเลอร์มาก? เช่นใน dsPIC การหารใช้เวลา 19 รอบในขณะที่การคูณจะใช้เวลาหนึ่งรอบนาฬิกา ฉันผ่านบทเรียนบางอย่างรวมถึงอัลกอริทึมการหารและอัลกอริทึมการคูณใน Wikipedia นี่คือเหตุผลของฉัน อัลกอริทึมการหารเช่นวิธีการหารช้าพร้อมการเรียกคืนบนวิกิพีเดียเป็นอัลกอริทึมแบบเรียกซ้ำ ซึ่งหมายความว่าผลลัพธ์ (ขั้นกลาง) จากขั้นตอนkจะใช้เป็นอินพุตไปยังขั้นตอนk+1ซึ่งหมายความว่าอัลกอริทึมเหล่านี้ไม่สามารถทำการขนานกันได้ ดังนั้นจึงใช้เวลาอย่างน้อยหนึ่งnรอบในการแบ่งให้เสร็จสมบูรณ์ในขณะที่nมีจำนวนบิตในเงินปันผล สำหรับการจ่ายเงินปันผลแบบ 16 บิตนี่จะเท่ากับอย่างน้อย 16 รอบ อัลกอริทึมการคูณไม่จำเป็นต้องเรียกซ้ำซึ่งหมายความว่ามันเป็นไปได้ที่จะทำให้มันขนานกัน อย่างไรก็ตามมีอัลกอริทึมการคูณที่แตกต่างกันมากมายและฉันไม่มีเงื่อนงำที่ไมโครคอนโทรลเลอร์อาจใช้ การคูณจะทำงานกับฮาร์ดแวร์ / ไมโครคอนโทรลเลอร์ได้อย่างไร ฉันได้พบอัลกอริทึมตัวคูณ Daddaซึ่งควรจะใช้เวลาหนึ่งรอบนาฬิกาเพื่อเสร็จสิ้น อย่างไรก็ตามสิ่งที่ฉันไม่ได้รับที่นี่คืออัลกอริทึมของ Dadda ดำเนินการในสามขั้นตอนในขณะที่ผลลัพธ์จากขั้นตอนที่ 1 ถูกนำมาใช้ในขั้นตอนที่ 2 เป็นต้นจากนี้สิ่งนี้จะใช้เวลาอย่างน้อยสามรอบนาฬิกา

4
การแบ่งเกิดขึ้นในคอมพิวเตอร์ของเราอย่างไร
การแบ่งเกิดขึ้นในคอมพิวเตอร์ดิจิทัลอย่างไร อัลกอริทึมสำหรับมันคืออะไร? ฉันค้นหาอย่างหนักใน google แต่ยังไม่ได้ผลลัพธ์ที่น่าพอใจ โปรดระบุอัลกอริทึม / ผังงานที่ชัดเจนมากสำหรับอัลกอริทึมการหารด้วยภาพประกอบตัวอย่าง

10
ผกผันมีประสิทธิภาพ (1 / x) สำหรับ AVR
ฉันพยายามหาวิธีที่มีประสิทธิภาพในการคำนวณค่าอินเวอร์สบน AVR (หรือประมาณค่า) ฉันพยายามคำนวณระยะเวลาพัลส์สำหรับสเต็ปเปอร์มอเตอร์เพื่อให้ฉันสามารถเปลี่ยนแปลงความเร็วเชิงเส้นได้ ช่วงเวลานั้นแปรผันตามค่าผกผันของความเร็ว ( p = K/v) แต่ฉันไม่สามารถคิดวิธีที่ดีในการคำนวณสิ่งนี้ได้ในทันที สูตรของฉันคือ p = 202/v + 298; // p in us; v varies from 1->100 การทดสอบใน Arduino ส่วนที่ดูเหมือนว่าจะถูกละเว้นอย่างสมบูรณ์ออกจากpคงที่298(แม้ว่าอาจจะแตกต่างกันใน avr-gcc) ฉันได้ลองหาข้อสรุปvแบบวนซ้ำจนกระทั่งมันเกิน202และนับลูป แต่มันค่อนข้างช้า ฉันสามารถสร้างตารางการค้นหาและเก็บไว้ในแฟลช แต่ฉันสงสัยว่ามีวิธีอื่น แก้ไข : บางทีชื่อควรจะเป็น "การหารที่มีประสิทธิภาพ" ... อัปเดต : เนื่องจาก pingswept ชี้ให้เห็นว่าสูตรการทำแผนที่ช่วงเวลากับความเร็วไม่ถูกต้อง แต่ปัญหาหลักคือการดำเนินการหาร แก้ไข 2 : ในการตรวจสอบเพิ่มเติมหารกำลังทำงานกับ arduino ปัญหาเกิดจากทั้งสูตรที่ไม่ถูกต้องด้านบนและ int …

10
วิธีที่เร็วที่สุดในการรับจำนวนเต็ม mod 10 และจำนวนเต็มหาร 10?
ถ้าฮาร์ดแวร์ไม่รองรับโมดูลัสหรือการหารมันต้องใช้รอบ CPU มากขึ้นในการจำลองโมดูลัส / การหารด้วยซอฟต์แวร์ มีวิธีใดที่เร็วกว่าในการคำนวณการหารและโมดูลัสถ้าตัวถูกดำเนินการเป็น 10? ในโครงการของฉันฉันต้องคำนวณโมดูลัสจำนวนเต็ม 10 โดยเฉพาะฉันกำลังทำงานกับ PIC16F และต้องแสดงตัวเลขบนจอ LCD มีตัวเลข 4 หลักที่จะรองรับดังนั้นจึงมีการเรียกฟังก์ชั่นโมดูลัสและการหาร 4 ครั้ง (การนำซอฟต์แวร์ไปใช้) นั่นคือเหมือนดังต่อไปนี้: digit = number % 10; // call to an expensive function number /= 10; // call to an expensive function somehow_lit_segments(); digit = number % 10; // call to an …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.