ฟังก์ชันตรีโกณมิติทำงานอย่างไร?


102

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

สิ่งที่ฉันสงสัยคือโดยทั่วไปแล้วฟังก์ชันตรีโกณมิติถูกนำมาใช้อย่างไร


คุณสับสนเกี่ยวกับฟังก์ชันตรีโกณมิติคืออะไรหรือใช้งานอย่างไร?
Kyle Cronin

15
ฉันรู้ว่าพวกเขาคืออะไร ฉันรู้ว่าพวกเขาทำอะไร ฉันรู้วิธีพิจารณาว่าฉันต้องการอะไรเพื่อจุดประสงค์ใด ฉันบอกคุณได้ทุกอย่างเกี่ยวกับความสัมพันธ์ระหว่างมุมและระยะทาง สิ่งที่ฉันกำลังมองหาคือคำตอบของ John D. Cook และคนอื่น ๆ ที่กล่าวถึงอัลกอริทึมจริง
Jurassic_C

นี่เป็นคำถามที่ดี ตัวอย่างเช่นไซน์โคไซน์และแทนเจนต์เป็นฟังก์ชันที่ยอดเยี่ยมและยากที่จะแก้ ... ในทางกลับกันสามารถกำหนดได้โดยใช้การขยายอนุกรมเทย์เลอร์แบบง่ายซึ่งจะให้คำตอบที่ถูกต้องตามระดับความแม่นยำที่ จำกัด จำเป็น
Alex

คำตอบ:


144

ขั้นแรกคุณต้องทำการลดช่วงบางประเภท ฟังก์ชันทริกเป็นช่วงเวลาดังนั้นคุณต้องลดอาร์กิวเมนต์ลงให้อยู่ในช่วงเวลามาตรฐาน สำหรับผู้เริ่มต้นคุณสามารถลดมุมให้อยู่ระหว่าง 0 ถึง 360 องศา แต่ด้วยการใช้ตัวตนเพียงไม่กี่ตัวคุณจะรู้ว่าคุณสามารถทำได้โดยใช้เวลาน้อยลง หากคุณคำนวณไซน์และโคไซน์สำหรับมุมระหว่าง 0 ถึง 45 องศาคุณสามารถเริ่มต้นด้วยวิธีคำนวณฟังก์ชันตรีโกณมิติสำหรับทุกมุมได้

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

มีการปรับแต่งบางอย่างสำหรับข้างต้น ตัวอย่างเช่นสำหรับ theta ที่มีมุมเล็กมาก (เป็นเรเดียน) sin (theta) = theta สำหรับความแม่นยำทั้งหมดที่คุณมีดังนั้นการคืนค่า theta จึงมีประสิทธิภาพมากกว่าการใช้อัลกอริทึมอื่น ๆ ดังนั้นในทางปฏิบัติมีตรรกะกรณีพิเศษมากมายที่จะบีบประสิทธิภาพและความแม่นยำทั้งหมดที่เป็นไปได้ ชิปที่มีตลาดขนาดเล็กอาจไม่ได้ใช้ความพยายามในการเพิ่มประสิทธิภาพมากนัก


4
คำตอบที่ดี - แม้ว่า CORDIC จะไม่ต้องการการลดช่วงต่อ se (อันที่จริงมันเป็นอัลกอริธึมการลดช่วงในแบบของมันเอง) มันใช้งานได้ดีสำหรับมุมระหว่าง -pi / 2 และ + pi / 2 ดังนั้นคุณต้องหมุนเวกเตอร์ 180 องศาสำหรับมุมนอกช่วงนั้น
Jason S

3
การใช้งานที่ใช้การประมาณแบบพหุนามมักใช้อนุกรมเทย์เลอร์ แต่โดยทั่วไปควรใช้สัมประสิทธิ์ที่กำหนดด้วยอัลกอริทึม Remez lolengine.net/blog/2011/12/21/better-function-approximations
Pascal Cuoq

1
โปรดทราบว่าตารางค่าที่ CORDIC ใช้จะต้องคำนวณล่วงหน้า ดังนั้น Taylor อาจยังคงใช้ใน "เวลารวบรวม"
Rhubbarb

2
ดูเหมือนว่าคำตอบนี้ขัดแย้งกับคำตอบที่ได้รับการยอมรับสูงในการจัดอันดับคำถามที่คล้ายกันนี้: stackoverflow.com/questions/2284860/... คำตอบนี้บอกว่าฟังก์ชัน sin () ส่วนใหญ่ใช้งานในระดับฮาร์ดแวร์ในขณะที่อีกฟังก์ชันหนึ่งกล่าวใน C.
Perry

48

แก้ไข: Jack Ganssle มีการอภิปรายที่ดีในหนังสือของเขาในระบบฝังตัว"เฟิร์มแว Handbook"

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

วิธีแก้ปัญหา "ง่าย" ที่ดีที่สุดเมื่อใช้พหุนามสูงสุดองศา N เพื่อประมาณฟังก์ชันที่กำหนด f (x) ในช่วง x0 <x <x1 มาจากการประมาณแบบ Chebyshev ; ดูสูตรตัวเลขเพื่อการสนทนาที่ดี โปรดทราบว่า Tj (x) และ Tk (x) ในบทความ Wolfram ที่ฉันเชื่อมโยงกับการใช้ cos และโคไซน์ผกผันสิ่งเหล่านี้เป็นพหุนามและในทางปฏิบัติคุณใช้สูตรการเกิดซ้ำเพื่อให้ได้ค่าสัมประสิทธิ์ อีกครั้งดูสูตรตัวเลข

แก้ไข: วิกิพีเดียมีบทความกึ่งดีในทฤษฎีการประมาณ แหล่งที่มาแหล่งหนึ่งที่พวกเขาอ้างถึง (Hart, "Computer Approximations") ไม่มีการพิมพ์ (& สำเนาที่ใช้มักจะมีราคาแพง) แต่มีรายละเอียดมากมายเกี่ยวกับสิ่งต่างๆเช่นนี้ (Jack Ganssle กล่าวถึงเรื่องนี้ในฉบับที่ 39 ของจดหมายข่าวThe Embedded Muse )

แก้ไข 2: ต่อไปนี้เป็นเมตริกข้อผิดพลาดที่จับต้องได้ (ดูด้านล่าง) สำหรับ Taylor vs. Chebyshev for sin (x) ประเด็นสำคัญที่ควรทราบ:

  1. ข้อผิดพลาดสูงสุดของการประมาณชุดเทย์เลอร์ในช่วงที่กำหนดนั้นใหญ่กว่าข้อผิดพลาดสูงสุดของการประมาณค่าเชบีเชฟในระดับเดียวกันมาก (สำหรับข้อผิดพลาดเดียวกันนี้คุณสามารถใช้ Chebyshev ได้น้อยลงหนึ่งคำซึ่งหมายถึงประสิทธิภาพที่เร็วขึ้น)
  2. การลดระยะเป็นชัยชนะอย่างมาก เนื่องจากการมีส่วนร่วมของพหุนามลำดับที่สูงกว่าจะหดตัวลงเมื่อช่วงเวลาของการประมาณมีขนาดเล็กลง
  3. หากคุณไม่สามารถหลีกเลี่ยงการลดช่วงได้ค่าสัมประสิทธิ์ของคุณจะต้องถูกจัดเก็บด้วยความแม่นยำมากขึ้น

อย่าเข้าใจฉันผิด: ซีรี่ส์ Taylor จะทำงานอย่างถูกต้องสำหรับไซน์ / โคไซน์ (ด้วยความแม่นยำที่เหมาะสมสำหรับช่วง -pi / 2 ถึง + pi / 2 ในทางเทคนิคด้วยเงื่อนไขที่เพียงพอคุณสามารถเข้าถึงความแม่นยำที่ต้องการสำหรับอินพุตจริงทั้งหมด แต่ลองคำนวณ cos (100) โดยใช้อนุกรมเทย์เลอร์และคุณไม่สามารถทำได้เว้นแต่คุณจะใช้เลขคณิตที่มีความแม่นยำโดยพลการ) ถ้าฉันติดอยู่บนเกาะร้างที่มีเครื่องคิดเลขแบบไร้สาระและฉันจำเป็นต้องคำนวณไซน์และโคไซน์ฉันอาจจะใช้อนุกรมเทย์เลอร์เนื่องจากค่าสัมประสิทธิ์นั้นจำง่าย แต่การใช้งานจริงของโลกต้องเขียนบาปของคุณเอง () หรือ cos () ฟังก์ชั่นที่มีมากพอที่หายากที่คุณต้องการจะดีที่สุดออกโดยใช้การดำเนินการที่มีประสิทธิภาพในการเข้าถึงความถูกต้องที่ต้องการ - ซึ่งซีรีส์เทย์เลอร์ไม่ได้

ช่วง = -pi / 2 ถึง + pi / 2, องศา 5 (3 เทอม)

  • เทย์เลอร์: ข้อผิดพลาดสูงสุดรอบ 4.5e-3, f (x) = xx 3 /6 x + 5 /120
  • Chebyshev: ข้อผิดพลาดสูงสุดประมาณ 7e-5, f (x) = 0.9996949x-0.1656700x 3 + 0.0075134x 5

ช่วง = -pi / 2 ถึง + pi / 2, องศา 7 (4 เทอม)

  • เทย์เลอร์: ข้อผิดพลาดสูงสุดรอบ 1.5e-4, f (x) = xx 3 /6 x + 5 /120 x 7 /5040
  • Chebyshev: ข้อผิดพลาดสูงสุดประมาณ 6e-7, f (x) = 0.99999660x-0.16664824x 3 + 0.00830629x 5 -0.00018363x 7

ช่วง = -pi / 4 ถึง + pi / 4, องศา 3 (2 เทอม)

  • เทย์เลอร์: ข้อผิดพลาดสูงสุดรอบ 2.5e-3, f (x) = xx 3 /6
  • Chebyshev: ข้อผิดพลาดสูงสุดประมาณ 1.5e-4, f (x) = 0.999x-0.1603x 3

ช่วง = -pi / 4 ถึง + pi / 4, องศา 5 (3 เทอม)

  • เทย์เลอร์: ข้อผิดพลาดสูงสุดรอบ 3.5e-5, f (x) = xx 3 /6 + x 5
  • Chebyshev: ข้อผิดพลาดสูงสุดประมาณ 6e-7, f (x) = 0.999995x-0.1666016x 3 + 0.0081215x 5

ช่วง = -pi / 4 ถึง + pi / 4, องศา 7 (4 เทอม)

  • เทย์เลอร์: ข้อผิดพลาดสูงสุดรอบ 3e-7, f (x) = xx 3 /6 x + 5 /120 x 7 /5040
  • Chebyshev: ข้อผิดพลาดสูงสุดประมาณ 1.2e-9, f (x) = 0.999999986x-0.166666367x 3 + 0.008331584x 5 -0.000194621x 7

2
ความคิดเห็นนี้ผิด มีเวลาและสถานที่สำหรับทุกประมาณ หากคุณไม่ทราบการวิเคราะห์เพียงพอที่จะกำหนดขอบเขตของการลู่เข้าสำหรับการประมาณอนุกรมใด ๆ คุณไม่ควรใช้มัน นั่นคือชุดของ Taylor, Chebyshev, Padé ฯลฯ ชุดเทย์เลอร์มักจะดีพอ
kquinn

4
: ยัก: ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันไม่เคยสนใจที่จะประเมินฟังก์ชันในย่านเล็ก ๆ เพียงจุดเดียว แม้แต่กำลังสองอย่างรวดเร็วที่พอดีกับช่วงเวลาก็ค่อนข้างง่ายที่จะทำ ใครก็ตามที่ใช้ชุดเทย์เลอร์ก็พลาดประเด็นไป
Jason S

1
@kquinn: ขอบเขตของการบรรจบกันสำหรับการประมาณค่า Chebyshev ไม่ใช่แนวคิดที่มีประโยชน์เนื่องจากช่วงเวลาที่คำนวณเป็นข้อมูลที่ชัดเจนในกระบวนการ
Jason S

2
การโหวตเพิ่มขึ้นเนื่องจากผู้ตอบรับรู้ว่ามีฮาร์ทอยู่ : smile: Hart เป็นเอกสารอ้างอิงแบบคลาสสิกของที่นี่แม้ว่าจะหาซื้อได้ยากเมื่อซื้อสำเนา (พิมพ์) เมื่อ 25 ปีก่อน มันคุ้มค่ากับเงินทุกบาท การลดระยะเมื่อทำได้ควบคู่ไปกับการประมาณที่เหมาะสมไม่ว่าจะเป็น Pade, Chebychev หรือแม้แต่ชุด Taylor ตามความเหมาะสมก็เป็นแนวทางที่ดี ค่าประมาณของ Pade หรือ Chebychev มักเป็นตัวเลือกที่ดีกว่าชุด Taylor

3
??? แตกต่างกันอย่างไร? ชุดเทย์เลอร์ออกไปที่ระดับ 17 เพื่อคำนวณ sin (x) จาก -2pi ถึง + 2pi Chebyshev อาจเอาชนะด้วยพหุนามระดับ 7 หรือ 9 ฉันคงไม่มีปัญหาในการพูดว่า "ถ้าคุณมีเวลา จำกัด ในการตัดต้นไม้คุณไม่ควรใช้เลื่อยมือใช้เลื่อยไฟฟ้า" บางทีฉันควรเปลี่ยนคำจาก "ไม่ควร" เป็น "ฉันไม่แนะนำให้ใช้ซีรี่ส์ Taylor" แน่นอนว่าคุณสามารถใช้ซีรี่ส์ Taylor ได้ในบางกรณี แต่ความแม่นยำและประสิทธิภาพของคุณจะมีปัญหา ตามประสิทธิภาพฉันหมายถึงเวลาดำเนินการของ CPU
Jason S

14

ผมเชื่อว่าพวกเขากำลังคำนวณโดยใช้เทย์เลอร์ซีรีส์หรือCORDIC แอปพลิเคชั่นบางตัวที่ใช้ฟังก์ชันตรีโกณมิติ (เกมกราฟิก) สร้างตารางตรีโกณมิติเมื่อเริ่มต้นระบบเพื่อให้สามารถค้นหาค่าแทนที่จะคำนวณซ้ำแล้วซ้ำอีก


6

ดูบทความ Wikipediaเกี่ยวกับฟังก์ชันตรีโกณมิติ เป็นสถานที่ที่ดีในการเรียนรู้เกี่ยวกับการดำเนินการจริงพวกเขาในรหัสคือสูตรตัวเลข

ฉันไม่ใช่นักคณิตศาสตร์มากนัก แต่ความเข้าใจของฉันว่าบาป cos และสีน้ำตาล "มาจากไหน" ก็คือสังเกตได้เมื่อคุณทำงานกับสามเหลี่ยมมุมฉาก หากคุณทำการวัดความยาวด้านข้างของสามเหลี่ยมมุมฉากที่แตกต่างกันจำนวนมากและพล็อตจุดบนกราฟคุณจะได้ค่า sin, cos และ tan จากสิ่งนั้น ดังที่ Harper Shelby ชี้ให้เห็นว่าฟังก์ชันต่างๆถูกกำหนดให้เป็นคุณสมบัติของสามเหลี่ยมมุมฉาก

ความเข้าใจที่ซับซ้อนมากขึ้นสามารถทำได้โดยการทำความเข้าใจว่าอัตราส่วนเหล่านี้เกี่ยวข้องกับรูปทรงเรขาคณิตของวงกลมอย่างไรซึ่งนำไปสู่เรเดียนและความดีทั้งหมดนั้น ทั้งหมดนี้อยู่ในรายการ Wikipedia


1

โดยทั่วไปสำหรับคอมพิวเตอร์การแสดงชุดกำลังจะใช้ในการคำนวณไซน์และโคไซน์และใช้สำหรับฟังก์ชันตรีโกณมิติอื่น ๆ การขยายอนุกรมเหล่านี้ออกไปประมาณ 8 คำจะคำนวณค่าที่จำเป็นเพื่อให้มีความแม่นยำใกล้เคียงกับ epsilon ของเครื่องจักร (เลขทศนิยมที่ไม่ใช่ศูนย์ที่เล็กที่สุดที่สามารถถือได้)

วิธีการ CORDIC นั้นเร็วกว่าเนื่องจากใช้กับฮาร์ดแวร์ แต่ส่วนใหญ่จะใช้สำหรับระบบฝังตัวไม่ใช่คอมพิวเตอร์มาตรฐาน


0

ฉันต้องการขยายคำตอบโดย @Jason S. โดยใช้วิธีการแบ่งโดเมนที่คล้ายกับที่ @Jason S อธิบายและใช้การประมาณชุด Maclaurin ค่าเฉลี่ย (2-3) X speedup เหนือ tan (), sin () ฟังก์ชัน cos (), atan (), asin () และ acos () ที่สร้างขึ้นในคอมไพเลอร์ gcc ที่มีการเพิ่มประสิทธิภาพ -O3 ฟังก์ชั่นการประมาณชุด Maclaurin ที่ดีที่สุดที่อธิบายไว้ด้านล่างนี้มีความแม่นยำสองเท่า

สำหรับฟังก์ชัน tan (), sin () และ cos () และเพื่อความเรียบง่ายโดเมน 0 ถึง 2pi + pi / 80 ที่ทับซ้อนกันถูกแบ่งออกเป็น 81 ช่วงเวลาเท่า ๆ กันโดยมี "จุดยึด" ที่ pi / 80, 3pi / 80, ... , 161pi / 80 จากนั้นจึงทำการประเมินและจัดเก็บ tan (), sin () และ cos () จาก 81 จุดยึด ด้วยความช่วยเหลือของข้อมูลประจำตัวตรีโกณมิติฟังก์ชันชุด Maclaurin เดียวได้รับการพัฒนาสำหรับฟังก์ชันตรีโกณ มุมใด ๆ ที่อยู่ระหว่าง±อินฟินิตี้อาจถูกส่งไปยังฟังก์ชันการประมาณค่าตรีโกณมิติเนื่องจากฟังก์ชันแรกจะแปลมุมอินพุตเป็นโดเมน 0 ถึง 2pi ค่าโสหุ้ยการแปลนี้รวมอยู่ในค่าใช้จ่ายโดยประมาณ

วิธีการที่คล้ายกันได้รับการพัฒนาสำหรับฟังก์ชัน atan (), asin () และ acos () โดยที่โดเมน -1.0 ถึง 1.1 ที่ทับซ้อนกันถูกแบ่งออกเป็น 21 ช่วงเวลาเท่า ๆ กันโดยมีจุดยึดที่ -19/20, -17/20, .. ., 19/20, 21/20 จากนั้นจะจัดเก็บเฉพาะ atan () จากจุดยึดทั้ง 21 จุดเท่านั้น อีกครั้งด้วยความช่วยเหลือของเอกลักษณ์ตรีโกณมิติฟังก์ชันชุดเดียวของ Maclaurin ได้รับการพัฒนาสำหรับฟังก์ชัน atan () ผลลัพธ์ของฟังก์ชัน atan () ถูกใช้เพื่อประมาณ asin () และ acos ()

เนื่องจากฟังก์ชันการประมาณค่าทริกเกอร์ผกผันทั้งหมดจะขึ้นอยู่กับฟังก์ชันการประมาณค่า atan () จึงอนุญาตให้ใช้ค่าอินพุตอาร์กิวเมนต์ที่มีความแม่นยำสองเท่า อย่างไรก็ตามอินพุตอาร์กิวเมนต์สำหรับฟังก์ชันการประมาณ asin () และ acos () จะถูกตัดทอนเป็นโดเมน± 1 เนื่องจากค่าใด ๆ ที่อยู่ภายนอกนั้นไม่มีความหมาย

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

ตารางที่ 2. เวลาที่ใช้เป็นวินาทีในการเรียกใช้ฟังก์ชันที่ระบุหรือฟังก์ชันหนึ่งพันล้านครั้ง ค่าประมาณได้มาจากการลบต้นทุนเวลาในการประเมินตัวเลขสุ่มหนึ่งพันล้านตัวเลขที่แสดงในแถวแรกของตารางที่ 1 จากแถวที่เหลือในตารางที่ 1

เวลาที่ใช้ในการฟอกหนัง (): 18.0515 18.2545

เวลาที่ใช้ใน TAN3 (): 5.93853 6.02349

เวลาที่ใช้ใน TAN4 (): 6.72216 6.99134

เวลาที่ใช้ในการทำ sin () และ cos (): 19.4052 19.4311

เวลาที่ใช้ใน SINCOS3 (): 7.85564 7.92844

เวลาที่ใช้ใน SINCOS4 (): 9.36672 9.57946

เวลาที่ใช้ใน atan (): 15.7160 15.6599

เวลาที่ใช้ใน ATAN1 (): 6.47800 6.55230

เวลาที่ใช้ใน ATAN2 (): 7.26730 7.24885

เวลาที่ใช้ใน ATAN3 (): 8.15299 8.21284

เวลาที่ใช้ใน asin () และ acos (): 36.8833 36.9496

เวลาที่ใช้ใน ASINCOS1 (): 10.1655 9.78479

เวลาที่ใช้ใน ASINCOS2 (): 10.6236 10.6000

เวลาที่ใช้ใน ASINCOS3 (): 12.8430 12.0707

(เพื่อประโยชน์ในการประหยัดพื้นที่ตารางที่ 1 จะไม่แสดง) ตารางที่ 2 แสดงผลลัพธ์ของการประเมินผลการประเมินเป็นพันล้านครั้งที่แยกจากกันสองครั้งของแต่ละฟังก์ชันโดยประมาณ คอลัมน์แรกคือการรันครั้งแรกและคอลัมน์ที่สองเป็นการรันครั้งที่สอง ตัวเลข '1', '2', '3' หรือ '4' ในชื่อฟังก์ชันระบุจำนวนคำศัพท์ที่ใช้ในฟังก์ชันชุด Maclaurin เพื่อประเมินการประมาณค่าตรีโกณมิติ SINCOS # () หมายความว่าทั้ง sin และ cos ได้รับการประเมินในเวลาเดียวกัน ในทำนองเดียวกัน ASINCOS # () หมายถึงทั้ง asin และ acos ได้รับการประเมินในเวลาเดียวกัน มีค่าใช้จ่ายเพิ่มเติมเล็กน้อยในการประเมินปริมาณทั้งสองในเวลาเดียวกัน

ผลลัพธ์แสดงให้เห็นว่าการเพิ่มจำนวนคำศัพท์เล็กน้อยช่วยเพิ่มเวลาในการดำเนินการตามที่คาดไว้ แม้แต่จำนวนคำที่น้อยที่สุดก็ให้ความแม่นยำประมาณ 12-14 หลักทุกที่ยกเว้นการประมาณสีแทน () ใกล้กับที่ค่าเข้าใกล้±อินฟินิตี้ ใคร ๆ ก็คาดหวังว่าฟังก์ชัน tan () จะมีปัญหา

ผลลัพธ์ที่คล้ายกันนี้ได้มาจากแล็ปท็อป MacBook Pro ระดับไฮเอนด์ใน Unix และบนคอมพิวเตอร์เดสก์ท็อประดับไฮเอนด์ใน Linux


-5

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

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