Apple Falling Division
[Paul Curtis] ที่ Segger มีชุดโพสต์บล็อกที่น่าสนใจเกี่ยวกับการคำนวณแผนก สิ่งนี้เคยเป็นหัวข้อที่ร้อนแรง แต่ทุกวันนี้คอมพิวเตอร์หลายเครื่องหรือภาษาคอมพิวเตอร์มีการสนับสนุนการคูณและการหารในตัว แต่โปรเซสเซอร์บางตัวขาดคำแนะนำและห้องสมุดที่จะทำมันอาจจะน้อยกว่าอุดมคติ การรู้วิธีการหมุนตัวของคุณเองอาจช่วยให้คุณสามารถปรับความเร็วหรือพื้นที่ให้เหมาะสม การผ่อนชำระในปัจจุบันครอบคลุมการใช้อัลกอริทึมของนิวตันในการหาร
สตีฟมาร์ตินมีชื่อดังเกี่ยวกับวิธีการเป็นเศรษฐีและไม่ต้องจ่ายภาษี เขาเริ่มต้นด้วยการพูดว่า “ครั้งแรก … รับล้านดอลลาร์ จากนั้น … “วิธีนี้เป็นเช่นนั้นเพราะคุณต้องรู้วิธีการคูณก่อนที่จะหาร หลักฐานพื้นฐานคือสองเท่า: วิธีการของนิวตันช่วยให้คุณสามารถปรับการประมาณการซึ่งกันและกันโดยการคูณต่อเนื่องแล้วคูณจำนวนซึ่งกันและกันก็เหมือนกับการหาร กล่าวอีกนัยหนึ่งถ้าเราต้องแบ่ง 34 ภายใน 6 คุณสามารถเขียน 34/6 ถึง 34 * 1/6 และคำตอบเหมือนกัน
การประมาณของนิวตันสำหรับการกันและกันช่วยให้คุณเดาคำตอบแล้วปรับแต่งผ่านชุดของการคูณ การคูณแต่ละครั้งจะสร้างความแม่นยำที่ดีขึ้น คุณสามารถใช้สิ่งนี้เพื่อทำการแลกเปลี่ยนความเร็ว / อวกาศแบบคลาสสิก ตัวอย่างเช่นสมมติว่าเราต้องการค้นหาซึ่งกันและกันของไบต์ (สันนิษฐานว่าเป็นไบต์คงที่) ตารางการค้นหา 256 องค์ประกอบจะให้ความแม่นยำที่สมบูรณ์แบบและจะเร็วมาก ไม่จำเป็นต้องใช้คณิตศาสตร์อีกต่อไป แต่ประมาณ 32 บิต? ตอนนี้โต๊ะใหญ่เกินไป แต่คุณสามารถค้นหาได้พูด 8 บิตแรกของหมายเลข 32 บิต หรือมากกว่า. หรือน้อยกว่า. ขึ้นอยู่กับสิ่งที่สำคัญสำหรับคุณ
ดังนั้นตอนนี้คุณมีการประมาณการที่ไม่ดีของการซึ่งกันและกันของคุณ Sir Issac สามารถทำให้ดีขึ้น สำหรับจำนวนหนึ่งคุณจะใช้การประเมินของคุณ (x) และทวีคูณเข้าด้วยกัน ลบหมายเลขนั้นจาก 2 และคุณมีปัจจัยในการคูณการประมาณการเก่าของคุณด้วยเพื่อรับการประมาณการใหม่ การข้ามไปข้างหน้าเป็นที่ชัดเจนหากการประเมินของคุณถูกต้องการคูณจะทำให้คุณ 1 ซึ่งจะไม่เปลี่ยนประมาณการเก่าเลย หากการประมาณการปิดอยู่คุณจะได้รับปัจจัยการปรับสเกล
เป็นสูตรที่ดูเหมือนว่า:
x = x * (2-a * x);
ดังนั้นหากคุณตัดสินใจซึ่งกันและกันของ 22 อาจจะเป็น. 02 Pass แรกจะให้คุณ:
0.02 * (2-22 * 0.02) = .0312
.0312 * (2-22 * .0312) = .0410
.0410 * (2-22 * .0410) = 0.0450
คำตอบที่ถูกต้องคือทศนิยมซ้ำ 0.0454545 และถ้าคุณไปต่อไปคุณจะไปถึงที่นั่น
แน่นอนคุณต้องคูณอีกครั้งในการทำแผนก
เราชอบที่โพสต์มีการใช้งานจุดคงที่แล้วตรวจสอบรหัสการประกอบที่เกิดขึ้นสำหรับ ARM, RISC-V และ DSPIC30 คุ้มค่าที่จะอ่าน
เรารักเทคนิคคณิตศาสตร์ที่เราสามารถใช้ในภาษาแอสเซมบลี หากคุณกำลังทำงานกับ AVR และจุดลอยอย่าพลาดวิธีนี้