คอมพิวเตอร์คำนวณค่าบาปอย่างไร [ปิด]


28

คอมพิวเตอร์คำนวณค่าบาปอย่างไร เมื่อฉันคิดเกี่ยวกับมันวิธีเดียวที่ชัดเจนคือการใส่ค่าบาปจำนวนมากในความทรงจำและเมื่อค่าความบาปต้อง "คำนวณ" มันจะดึงข้อมูลจากที่อยู่หน่วยความจำเฉพาะ (เช่น sin (x) ดึงข้อมูลจากที่อยู่หน่วยความจำที่มีค่าของบาป (x) ที่ดูเหมือนเป็นวิธีเดียวที่จะทำได้ หรือมีฟังก์ชั่นที่สามารถใช้คำนวณบาปของค่าได้หรือไม่? ฉันพยายามถามว่าคอมพิวเตอร์คำนวณบาปในระดับฐานได้อย่างไร มีวิธีประมาณค่าบาปโดยใช้ฟังก์ชันที่แตกต่างกันซึ่งประกอบด้วยการดำเนินการ "พื้นฐาน" มากกว่าและ ALU จะสามารถดำเนินการ "พื้นฐาน" หลายอย่างเพื่อประมาณค่าบาปหรือเป็นเพียงการดึงค่าจากหน่วยความจำหรือไม่?


10
Google "CORDIC" Google "ชุดเทย์เลอร์" และความคิดของคุณเกี่ยวกับความทรงจำไม่ชัดเจน
ยูจีน Sh.

8
เมธอด "หน่วยความจำ" เป็นเทคนิคการปรับให้เหมาะสมใช้บ่อยที่สุด (ชื่อคือ "ตารางค้นหา") แต่ไม่ในตอนแรกคอมพิวเตอร์ไม่มี แต่ถ้าคุณหลงทางเกี่ยวกับวิธีคำนวณคอมพิวเตอร์<placeholder>Google " <placeholder>อัลกอริทึมการคำนวณ" มันใช้งานได้ดีกว่าการถามทาง SE ในกรณีส่วนใหญ่ ..
Eugene Sh

5
นอกเหนือจาก CORDIC และ Taylors แล้วคุณควรมองหา Chebyshev ควบคู่ไปกับเทคนิค minimax แบบไม่เชิงเส้น ข้อผิดพลาดค่าเฉลี่ยของเทย์เลอร์ จำกัดในขณะที่ Chebyshev ขอบเขตข้อผิดพลาดสูงสุดและปิดได้เร็วขึ้นเช่นกัน ค่าต่ำสุดจำเป็นเนื่องจากค่าคงที่ไม่แม่นยำอย่างแน่นอนและไม่มีการดำเนินการ และคุณต้องใช้ประโยชน์จากสมมาตรอย่างบ้าคลั่ง!
jonk

3
คุณทราบหรือไม่ว่ามีซีรีส์ที่สามารถใช้ในการคำนวณบาปได้เช่นเดียวกับ cos, log, exponents, pi, สแควร์รูทเป็นต้น
Andy aka

2
แน่นอนคุณสามารถมีเนื้อหาในหน่วยความจำคอมพิวเตอร์ "ในตอนแรก" - คุณคิดว่าคอมพิวเตอร์บูตอย่างไร ค่าเริ่มต้นสามารถต่อสายเข้ากับวงจรที่สร้างไว้ในเซลล์หน่วยความจำแบบอ่านอย่างเดียวหรือเลเยอร์การทำให้เป็นโลหะของ ic ถูกเผาเป็นฟิวส์จัดเก็บเป็นประจุที่ติดอยู่เช่นเดียวกับการอ่านจากดิสก์เทปพันสายไฟหรือสวิตช์สลับ ในหลักการมีประโยชน์สำหรับตารางที่คำนวณล่วงหน้าได้เช่นกันและในความเป็นจริงอัลกอริทึมจำนวนมากต้องการค่าคงที่ต่างๆ สิ่งที่ดีที่สุดจะต้องตัดสินใจตามความต้องการเทคโนโลยีและแม้แต่ทรัพยากรที่เหลือหลังจากความต้องการอื่น ๆ
Chris Stratton

คำตอบ:


30

โดยทั่วไปแล้วฟังก์ชั่น sin (x) ความละเอียดสูงจะดำเนินการด้วยอัลกอริทึม CORDIC (COrdiate Rotation DIgital Computer) ซึ่งสามารถทำได้ด้วยการวนซ้ำจำนวนน้อยโดยใช้การเลื่อนและเพิ่ม / ลบและตารางการค้นหาขนาดเล็กเท่านั้น กระดาษเดิม เทคนิค CORDIC คอมพิวเตอร์โดยแจ็ค Volder จากปี 1959 นอกจากนี้ยังทำงานอย่างเมื่อนำมาใช้กับฮาร์ดแวร์ใน FPGA (และขั้นตอนวิธีการที่คล้ายกันจะได้รับการดำเนินการใน FPU ฮาร์ดแวร์สำหรับไมโครผู้ที่มี FPU)

สำหรับความละเอียดที่ต่ำกว่าเช่นการสร้างคลื่นไซน์สังเคราะห์สำหรับอินเวอร์เตอร์หรือมอเตอร์ VFD (Variable Frequency Drive) ตารางการค้นหา (LUT) ที่มีหรือไม่มีการแก้ไขทำงานได้ดี จำเป็นต้องเก็บค่าสำหรับจตุภาคหนึ่งของคลื่นไซน์เนื่องจากสมมาตร

ตามที่ @Temlib ชี้ให้เห็นว่าอัลกอริทึมที่ใช้ใน FPU สมัยใหม่นั้นใช้การลดช่วงตามด้วยการประเมินโดยใช้บางอย่างเช่นอัลกอริทึม Remezเพื่อ จำกัด ข้อผิดพลาดสัมบูรณ์สูงสุด เพิ่มเติมสามารถพบได้ในนี้อินเทลกระดาษการยืนยันอย่างเป็นทางการของลอยฟังก์ชันตรีโกณมิติจุด


2
CORDIC ใช้สำหรับการแปลงฟังก์ชั่นฮาร์ดแวร์แบบตายตัว สำหรับคอมพิวเตอร์ที่มี FPU การประมาณค่าพหุนามจะเร็วกว่าและเหมาะสมกว่าเนื่องจากจะใช้ตัวดำเนินการทางคณิตศาสตร์ที่มีอยู่แล้วแทนเครื่อง CORDIC shift-and-add พิเศษ
TEMLIB

1
@TEMLIB ใช่แล้วนั่นเป็นจุดที่ถูกต้องฉันจะเพิ่มเข้าไปในคำตอบ CORDIC ถูกใช้ในเครื่องคิดเลขทางวิทยาศาสตร์เครื่องแรกเช่น HP-35
Spehro Pefhany

ตามความรู้ของฉัน CORDIC มีการใช้งานฮาร์ดแวร์เป็นครั้งแรกในเครื่องคิดเลขตั้งโต๊ะ HP 9100A มันมีการ์ดวงจรพิมพ์ประมาณหนึ่งฟุตสแควร์ปกคลุมด้วยไดโอดซึ่งทำหน้าที่เป็น ROM ที่เก็บพารามิเตอร์ที่ใช้โดยอัลกอริทึม CORDIC
Hot Licks

@HotLicks - คุณคงไม่ถูกต้อง CORDIC ได้รับการพัฒนาและใช้ในคอมพิวเตอร์นำทางในเที่ยวบินเกือบสิบปีก่อน HP 9100A
Chris Stratton

@ChrisStratton - ฉันยืนแก้ไขแล้ว
Hot Licks

14

ไลบรารีคอมพิวเตอร์ตรีโกณมิติส่วนใหญ่นั้นมีพื้นฐานมาจากการประมาณพหุนามซึ่งให้ความสมดุลที่ดีที่สุดระหว่างความเร็วและความแม่นยำ ตัวอย่างเช่นการดำเนินการคูณและเพิ่มและลบ / โหลนั้นเพียงพอที่จะให้ความถูกต้องแม่นยำเต็มรูปแบบเดียวสำหรับไซน์และโคไซน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.