ความเกี่ยวข้องของการคำนวณที่มีจุดคงที่และความแม่นยำโดยพลการ


10

ฉันเห็นไลบรารี่ / แพ็กเกจการประมวลผลจุดลอยตัวน้อยมาก เนื่องจากความไม่ถูกต้องของการเป็นตัวแทนจุดลอยตัวคำถามเกิดขึ้นว่าทำไมมีอย่างน้อยบางฟิลด์ที่ความแม่นยำที่เพิ่มขึ้นนี้อาจคุ้มค่ากับความซับซ้อนของการทำงานกับจุดคงที่

มีปัญหาใด ๆ ในการใช้ MAJOR พูดแก้จุดเฉพาะค่าคงที่? จะช้า / เร็วไม่ถูกต้อง / แม่นยำได้อย่างไร

ที่เกี่ยวข้อง: นี่และสิ่งนี้


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

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

5
ฉันคิดว่ามีคำตอบทางเทคนิคอย่างมีวัตถุประสงค์สำหรับเรื่องนี้: หากคุณใช้การคำนวณทางวิทยาศาสตร์เกือบทั้งหมด (เช่นการแก้ปัญหาเชิงเส้น) จำนวนบิตที่จำเป็นสำหรับการจัดเก็บข้อมูลที่แน่นอนจะเพิ่มขึ้นอย่างรวดเร็วในเวลาชี้แจง ดังนั้นจึงจำเป็นต้องมีการสนับสนุนที่เข้มงวดสำหรับความไม่แน่นอนสำหรับงานที่มีประโยชน์
Geoffrey Irving

@MilindR: ชุมชนเรขาคณิตการคำนวณมีความสนใจในการคำนวณจำนวนจริงที่มีประสิทธิภาพสูงและแน่นอนในเวลาเดียวกัน ฉันเดาว่าปัญหาการปฏิบัติทั้งหมดที่เกี่ยวข้องกับคุณสามารถสังเกตได้ในงานวิจัยนี้ ตัวอย่างที่คุณสามารถค้นหาได้คือไลบรารี่ LEDA
shuhalo

@ GeoffreyIrving แล้วค่าศูนย์ในเมทริกซ์สามเหลี่ยม? พวกเขาไม่สามารถจัดเก็บเป็นสิ่งอื่นนอกเหนือจากข้อผิดพลาดที่ไม่แน่นอนจุดลอยได้หรือไม่
Milind R

คำตอบ:


5

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

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

พื้นที่หนึ่งที่จุดคงที่สามารถส่องแสงได้ในบางพื้นที่ของการคำนวณทางเรขาคณิต โดยเฉพาะอย่างยิ่งถ้าคุณต้องการเลขคณิตที่แน่นอนหรือรู้ช่วงไดนามิกของตัวเลขทั้งหมดล่วงหน้าจุดคงที่จะช่วยให้คุณใช้ประโยชน์จากบิตทั้งหมดในการเป็นตัวแทนของคุณ ตัวอย่างเช่นสมมติว่าคุณต้องการคำนวณจุดตัดของสองบรรทัดและจุดสิ้นสุดของสองบรรทัดนั้นถูกทำให้เป็นมาตรฐานเพื่อให้อยู่ในหน่วยสี่เหลี่ยม ในกรณีนี้จุดตัดสามารถแสดงด้วยบิตของความแม่นยำมากกว่าการใช้หมายเลขจุดลอยตัวที่เท่ากัน (ซึ่งจะทำให้เศษบิตบนเลขชี้กำลัง) ตอนนี้ก็เป็นกรณีที่ตัวเลขกลางที่จำเป็นในการคำนวณนี้ต้องได้รับการคำนวณเพื่อความแม่นยำที่สูงขึ้นหรืออย่างน้อยก็ทำอย่างระมัดระวังมาก (เช่นเมื่อแบ่งผลิตภัณฑ์ของตัวเลขสองตัวด้วยตัวเลขอื่นคุณจะต้องระมัดระวังให้มาก ) ในแง่นี้จุดคงที่จะได้รับประโยชน์มากกว่าจากมุมมองการเป็นตัวแทนมากกว่าจุดยืนการคำนวณและฉันจะบอกว่านี่เป็นความจริงโดยทั่วไปเมื่อคุณสามารถสร้างขอบเขตบนและล่างที่แน่นอนในช่วงไดนามิกของอัลกอริทึมของคุณ . สิ่งนี้เกิดขึ้นน้อยมาก

ฉันเคยคิดว่าการเป็นตัวแทนจุดลอยตัวนั้นเป็นเรื่องหยาบหรือไม่ถูกต้อง (ทำไมเศษบิตบนเลขชี้กำลัง?!) แต่เมื่อเวลาผ่านไปฉันได้ตระหนักว่ามันเป็นหนึ่งในตัวแทนที่ดีที่สุดที่เป็นไปได้สำหรับจำนวนจริง สิ่งต่าง ๆ ในธรรมชาติปรากฏบนเครื่องชั่งล็อกดังนั้นข้อมูลจริงจึงสิ้นสุดลงด้วยการยกกำลังจำนวนมาก นอกจากนี้เพื่อให้ได้ความแม่นยำสัมพัทธ์สูงสุดที่เป็นไปได้จำเป็นต้องทำงานบนเครื่องชั่งบันทึกทำให้การติดตามเลขชี้กำลังเป็นธรรมชาติมากขึ้น คู่แข่งเท่านั้นอื่น ๆ สำหรับการแสดง "ธรรมชาติ" เป็นดัชนีระดับสมมาตร อย่างไรก็ตามการเพิ่มและการลบนั้นช้ากว่ามากในการนำเสนอนั้นและขาดการสนับสนุนฮาร์ดแวร์ของ IEEE 754 จำนวนความคิดที่มากมายได้ถูกนำไปใช้ในมาตรฐานจุดลอยตัวโดยเสาของพีชคณิตเชิงเส้นเชิงตัวเลข ฉันคิดว่าเขารู้ว่าตัวเลขที่ถูกต้องคืออะไร


4

เป็นตัวอย่างว่าทำไมเลขคณิต / จุดคงที่ที่แน่นอนจึงไม่ค่อยถูกใช้ให้พิจารณาสิ่งนี้:

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

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


มันน่าหงุดหงิดที่จะยอมรับ แต่ใช่คำตอบของคุณโดยทั่วไปตรึงการใช้การคำนวณจำนวนมากอย่างแน่นอน ฉันเดาว่าฉันจะไม่เห็นหลังfloatเวลาใด ๆ ในไม่ช้า
Milind R

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

มันน่าหงุดหงิดเพราะปัญหาปกติอย่างสมบูรณ์อาจมีเงื่อนไขไม่ดีจนไม่สามารถละลายได้อย่างมีประสิทธิภาพ เช่นกันเพราะอุดมคติของความแม่นยำโดยพลการนั้นดูมีแนวโน้มมากเมื่อเทียบกับลักษณะที่ไม่แน่นอนของจุดลอยตัวที่ถูกต้องจากการจัดเก็บค่าเพื่อส่งออก
Milind R

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

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

3

หากคุณดูไลบรารีนี้สำหรับการปัดเศษที่ถูกต้อง: CRlibmคุณจะเห็นในเอกสารประกอบที่โดยทั่วไปอัลกอริทึมต้องได้รับการพิสูจน์ว่าถูกต้อง (พร้อมหลักฐานที่มีเหตุผล) ทำไม? ความเสถียรและความเร็วของการลู่เข้าของผลลัพธ์ของฟังก์ชันไม่มีคำตอบ "หนึ่งขนาดเหมาะกับทุกคน" ในระยะสั้นมี "ไม่มีอาหารกลางวันฟรี" - คุณต้องทำงานเพื่อพิสูจน์เหตุผลของคุณถูกต้อง นี่เป็นเพราะพฤติกรรมของฟังก์ชั่นที่ถูกสร้างแบบจำลองไม่ใช่ฮาร์ดแวร์พื้นฐาน (ไม่ว่าคุณจะใช้หน่วยจำนวนเต็มหรือเลขทศนิยมแม้ว่าจะใช่ทั้งคู่มี "gotchas" เช่นล้น / อันเดอร์, ตัวเลขปกติ ฯลฯ ) แม้ว่าผลลัพธ์ คุณกำลังหาลู่หาค่าเป็นจำนวนเต็มอัลกอริทึมที่ใช้ในการค้นหาผลลัพธ์ไม่จำเป็นต้องมีเสถียรภาพมากนัก

Eigen เป็นไลบรารี C ++ ที่มีอัลกอริธึมที่หลากหลายสำหรับการแก้ไขเมทริกซ์แต่ละตัวมีคุณสมบัติแตกต่างกัน หน้านี้มีตารางที่กล่าวถึงความเร็วเทียบกับการแลกเปลี่ยนความแม่นยำสำหรับอัลกอริทึมต่างๆที่ใช้สำหรับการแก้เมทริกซ์ ฉันสงสัยว่าห้องสมุด Eigen สามารถทำสิ่งที่คุณต้องการ :-)


ขอบคุณ .. ข้อมูลมากและลิงค์ดี แต่การใช้จุดตรึงพร้อมกับขอบเขตการปัดเศษไม่ จำกัด ทำให้ได้ผลลัพธ์ที่แม่นยำมากขึ้นหรือไม่? ตั้งแต่การเป็นตัวแทนตัวเองแน่นอนที่จะเริ่มต้นด้วยเหมือนจุดลอยตัว?
Milind R

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

ฉันแค่เข้าใจคุณราง ๆ ... ฉันมองไม่เห็นว่าฉันจะ "กำจัด" ปัญหานี้ได้อย่างไรการให้เหตุผลเป็นสิ่งจำเป็น
Milind R

หลายปีต่อมาฉันเข้าใจคุณจริง ๆ :-)
Milind R

2

สำหรับตัวอย่างที่ดีของการคำนวณที่มีความแม่นยำสูงมีประโยชน์ในวิชาคณิตศาสตร์ลองดูที่หนังสือคณิตศาสตร์โดยการทดลองโดย Jonathan Borwein และ David Bailey นอกจากนี้ยังมีภาคต่อที่ฉันไม่ได้อ่าน

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