เหตุใดจึงใช้ตัวเลขทศนิยมในวิทยาศาสตร์ / วิศวกรรม


33

ในขณะที่ตรวจสอบความถูกต้องของตัวเลขจำนวนจุดลอยตัวฉันเคยเห็นข้อความคล้าย ๆ

" โฟลตและดับเบิลคือ ( ออกแบบมาสำหรับ / ใช้บ่อยใน ) วิศวกรรมและการคำนวณทางวิทยาศาสตร์ "

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

ฉันรู้สึกว่าฉันเกือบจะได้รับความเข้าใจจากคำตอบนี้

"ตัวเลขจุดลอยตัวช่วยให้คุณจำลองปริมาณอย่างต่อเนื่อง"

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

ใครบางคนสามารถขยายคำอธิบายนี้และอาจยกตัวอย่าง?



47
Engineering and Science both sound like fields where you would want precise results from your calculations, which, from my understanding, floating points do not give.ทั้งในวิทยาศาสตร์และวิศวกรรมคุณสนใจเฉพาะความแม่นยำจนถึงจุดหนึ่ง การใช้ความแม่นยำไม่สิ้นสุดสำหรับการคำนวณทุกครั้งมักมีราคาแพงโดยไม่จำเป็น สิ่งที่กำหนดจุดลอยตัวนอกเหนือจากจุดคงที่คือคุณไม่จำเป็นต้องกำหนดจำนวนทศนิยม - คุณสามารถมีปริมาณน้อยมากที่มีทศนิยมจำนวนมากหรือจำนวนมากที่มีความแม่นยำ จำกัด
Doval

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

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

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

คำตอบ:


77

การคำนวณในวิทยาศาสตร์และวิศวกรรมต้องการการแลกเปลี่ยนในความแม่นยำช่วงและความเร็ว เลขคณิตของจุดคงที่ให้ความแม่นยำและความเร็วที่เหมาะสม แต่มันเสียสละช่วง BigNum ห้องสมุดที่มีความแม่นยำตามอำเภอใจชนะในระยะและความแม่นยำ แต่เสียความเร็ว

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

ข้อยกเว้นสำหรับเรื่องนี้คือทฤษฎีตัวเลขในวิชาคณิตศาสตร์ที่ต้องการดำเนินการทางคณิตศาสตร์กับตัวเลขที่มีหลักล้าน แต่มีความแม่นยำแน่นอน นักทฤษฎีจำนวนมากมักใช้ห้องสมุด BigNum และพวกเขาใช้เวลาในการคำนวณนาน


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

4
@JonathanEunice คุณไม่สามารถสร้างแบบจำลองความเป็นจริงได้ อินพุตสำหรับโมเดลมาจากการวัดและคุณอาจไม่สามารถวัดสิ่งต่าง ๆ ได้อย่างแม่นยำจนจำนวนจริงดั้งเดิมในคอมพิวเตอร์ / ซอฟต์แวร์สมัยใหม่ (ในเวลานั้น) จะ จำกัด มัน กล่าวอีกนัยหนึ่งคุณสามารถมีโมเดลซอฟต์แวร์หรือคณิตศาสตร์ที่สมบูรณ์แบบได้ เช่นคำนวณปริมาตรของกล่อง a*b*cสิ่งง่าย ๆ แต่คุณต้องวัดขนาดที่คุณไม่สามารถทำได้ด้วยความแน่นอนอย่างสมบูรณ์ดังนั้นคุณไม่จำเป็นต้องมีความแม่นยำอย่างไม่มีที่สิ้นสุดในการคำนวณอย่างไรก็ตามก็เพียงพอที่จะมีข้อผิดพลาดในการวัด
luk32

2
@ luk32 เราเห็นด้วยอย่างรุนแรงเกี่ยวกับประเด็นเหล่านั้นส่วนใหญ่ เราสามารถสร้างแบบจำลองบางสิ่งอย่างแน่นอน (ปริมาตรของทรงกลมเช่น) แต่ไม่สามารถวัดได้อย่างแน่นอน และความจริงก็ไม่เหมาะกับโมเดลที่สมบูรณ์แบบ ดีกว่าที่จะได้รับค่า / โมเดลที่ไม่เป็นประโยชน์เล็กน้อยกว่ารอการวัดหรือการคำนวณที่สมบูรณ์แบบ - สิ่งที่จะอยู่ห่างออกไปหนึ่งก้าว
Jonathan Eunice

2
“ ประเด็นสำคัญของเรื่องนี้ก็คือการคำนวณทางวิทยาศาสตร์และวิศวกรรมส่วนใหญ่ต้องการความเร็วสูงและช่วงกว้างมาก” ถ้าฉันให้เวลานานคุณคงไม่สามารถคำนวณได้อย่างแน่นอนเพราะอัลกอริทึมในการคำนวณนั้นไม่เป็นที่รู้จักอย่างกว้างขวาง ประการแรกเราไม่สามารถแสดงตัวเลขได้อย่างแน่นอน นี่เป็นเพียงปัญหาที่เราไม่ทราบวิธีการแก้ไขไม่ได้อย่างรวดเร็วหรือช้า
Michael Le Barbier Grünewald

@ MichaelGrünewaldเราไม่สามารถแสดงจำนวนจริงได้อย่างแน่นอน แต่เราสามารถแก้ปัญหาให้ใกล้พอที่เราจะสร้างโครงสร้างสูงสองพันฟุตระบุยีนใน DNA และพบดาวเทียมด้วยดาวหางหลังจากสองปี ในที่ว่าง. ในการถอดความแรนดี้นิวแมนนั้นอาจไม่แน่นอน แต่ก็ไม่เป็นไร ในความเป็นจริงเราสามารถเป็นตัวแทนปันส่วนอย่างแน่นอนโดยใช้ไลบรารีที่มีความแม่นยำตามอำเภอใจ (ขึ้นอยู่กับข้อ จำกัด ของหน่วยความจำ)
Charles E. Grant

30

สิ่งที่ทางเลือกที่คุณนำเสนอ?

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

  • คุณสามารถเลือก reals ที่คำนวณได้ทั้งหมดซึ่งคล้ายกับระบบพีชคณิตของคอมพิวเตอร์ (CAS) ปัญหาคือมันไม่สามารถทำได้อย่างรวดเร็วเมื่อต้นไม้นิพจน์ของคุณขยายใหญ่ขึ้นเรื่อย ๆ มันช้ามาก: ลองแก้ระบบสมการเชิงอนุพันธ์ขนาดใหญ่ในสัญลักษณ์ Mathematica และเปรียบเทียบกับการนำไปใช้แบบอิงดัชนีอื่น ๆ และคุณจะเห็นความแตกต่างของความเร็วอย่างมาก นอกจากนี้ในขณะที่Jörg W Mittag และ kasperd ได้ชี้ให้เห็น: คุณไม่มีการดำเนินงานที่เท่าเทียมกัน / เปรียบเทียบได้

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

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

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


1
หนึ่งในคำตอบที่ดีที่สุดฉันมองข้ามมันก่อนที่จะเขียนของฉัน
Michael Le Barbier Grünewald

8
นอกจากนี้ยังมีข้อเท็จจริงที่ไม่สะดวกเล็กน้อยที่คุณไม่สามารถบอกได้ว่าทั้งสอง reals ที่คำนวณได้มีค่าเท่ากันหรือไม่
Jörg W Mittag

1
การใช้ reals ที่คำนวณได้ทั้งหมดจะไม่ประสบปัญหากับการเปรียบเทียบหรือไม่ ฉันค่อนข้างมั่นใจว่าคุณไม่สามารถเปรียบเทียบ reals ที่คำนวณได้เองโดยไม่ต้องแก้ปัญหาการหยุดชะงัก
kasperd

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

คุณสามารถรองรับการคำนวณทางคณิตศาสตร์ที่มีความแม่นยำตามอำเภอใจ (เพิ่มคูณลบหาร) irrationals (เช่น ,2), transcendentals ที่รู้จักกันดี (เช่น Pi และ e) ฟังก์ชันตรีโกณฯ ฯลฯ โดยใช้เศษส่วนต่อเนื่อง ดูอัลกอริทึมของ Gosper ใน HAKMEM เมื่อเสร็จแล้วคุณสามารถทำการประเมินผลแบบขี้เกียจเพื่อรับค่าประมาณจุดลอยตัวกับความแม่นยำที่ต้องการ
Paul Chernoch

14

ข้อเสนอของคุณเกี่ยวกับวิทยาศาสตร์ผิดวิศวกรรมและวิทยาศาสตร์อื่น ๆ จากนั้นคณิตศาสตร์ไม่ทำงานกับผลลัพธ์ที่แม่นยำแน่นอน มันทำงานร่วมกับปัจจัยความแม่นยำที่สร้างขึ้นในจำนวนหลักที่คุณแสดง

คำสำคัญที่คุณต้องเข้าใจที่นี่คือ: ตัวเลขที่สำคัญตัวเลขที่สำคัญตัวเลขที่มีนัยสำคัญของตัวเลขคือตัวเลขเหล่านั้นที่มีความหมายซึ่งนำไปสู่ความแม่นยำ

ซึ่งโดยทั่วไปหมายความว่าหากฉันระบุว่ามีความยาว 12 เซนติเมตรมันอาจอยู่ระหว่าง 11,5 ถึง 12,5 เซนติเมตร หากฉันระบุว่ามีบางสิ่งบางอย่างยาว 12,00 เซนติเมตรมันอาจอยู่ระหว่าง 11,995 ถึง 12,005 เซนติเมตร

เช่นเดียวกับภาพประกอบถ้าคุณใช้เทปวัดและวัดห้องนั่งเล่นของคุณ แม้ว่าคุณจะพบว่ามันกว้าง 6 เมตร 25 เซนติเมตร แต่คุณรู้ว่าการวัดเทปของคุณไม่แม่นยำพอที่จะบอกอะไรเกี่ยวกับความแม่นยำของมิลลิเมตรและนาโนเมตร


@leftaroundabout คุณหมายถึงคณิตศาสตร์ (ในคณิตศาสตร์) ไม่ใช่วิทยาศาสตร์? ในหนังสือของฉันมันเป็น
Pieter B

2
@PieterB: คณิตศาสตร์ไม่ใช่วิทยาศาสตร์ มันเป็นปรัชญา วิทยาศาสตร์มันเป็นการกระทำที่ก่อให้เกิดความเข้าใจในโลกทางกายภาพของเรา ปรัชญาคือการทำความเข้าใจว่าแนวคิดทำงานอย่างไรในโลกอุดมคติ
slebetman

ฉันคิดว่าวิทยาศาสตร์มักชอบทำงานกับช่วงความมั่นใจอย่างชัดเจนมากกว่าตัวเลขที่สำคัญ
Taemyr

@slebetman นอกจากนั้นมันไม่มีส่วนเกี่ยวข้องกับประเด็นของฉันในการโพสต์ของฉันถ้าคณิตศาสตร์เป็นวิทยาศาสตร์หรือไม่ฉันไม่สามารถช่วยลดการพูด: ธรรมชาติเป็นคณิตศาสตร์โดยกำเนิดและเธอพูดกับเราในวิชาคณิตศาสตร์ เราแค่ต้องฟัง เนื่องจากธรรมชาติเป็นคณิตศาสตร์วิทยาศาสตร์ใด ๆ ที่ตั้งใจจะอธิบายธรรมชาติขึ้นอยู่กับคณิตศาสตร์อย่างสมบูรณ์ เป็นไปไม่ได้ที่จะเน้นย้ำจุดนี้มากเกินไปและเป็นสาเหตุที่ Carl Friedrich Gauss เรียกคณิตศาสตร์ว่า "ราชินีแห่งวิทยาศาสตร์"
Pieter B

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

7

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

ในการเลือกตัวอย่างแบบสุ่มจากการบ้านฟิสิกส์ของฉันเมื่อเร็ว ๆ นี้ฉันต้องทำงานกับมวลของอิเล็กตรอนซึ่งมีค่าประมาณ 9.11 * 10 ^ -31 กิโลกรัม ฉันไม่สนใจความแม่นยำมากนัก มันอาจเป็น 9.12 สำหรับทุกสิ่งที่ฉันสนใจ แต่ฉันสนใจเลขชี้กำลังและไม่ต้องการเขียน 0.0000 ... 911 กิโลกรัมดังนั้นฉันจึงใช้สัญลักษณ์ทางวิทยาศาสตร์

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


6

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

กระดาษของ Goldbergน่าจะเป็นการวิเคราะห์ที่มีชื่อเสียงที่สุดของคุณสมบัติของตัวเลข floating-point (และควรจะต้องอ่านถ้าคุณสนใจเรื่องแบบนี้) แต่เอกสารของ Kahanผมคิดว่าจะอธิบายเหตุผลได้ดีกว่าเบื้องหลังหลาย ๆ อย่าง ปัญหาการออกแบบ

โดยเฉพาะอย่างยิ่งการวิจารณ์ของ Kahan เกี่ยวกับการดำเนินการของ Java ของจุดลอยตัวในขณะที่การอักเสบค่อนข้างทำให้หลายจุดที่ดีว่าทำไมความหมายของ IEEE-754 จึงมีประโยชน์และMuch Ado About Nothing บิตสำรวจเหตุผลในการลงนาม


ฉันยังไม่ได้อ่านบทความทั้งหมดของ Kahan แต่เขาดูสุภาพกว่าที่ฉันจะเป็น Java อาจมีตัวเลขซึ่งมีประโยชน์มากกว่าและทำงานได้เร็วกว่าที่เป็นจริงหากมีการเพิ่มrealประเภทที่ต้องใช้รายการสแต็กสามรายการเพื่อจัดเก็บและจะแสดงถึงความแม่นยำในการคำนวณตามธรรมชาติของเครื่อง ค่าสามารถเก็บไว้เป็น 80-bit float + 16 bits padding 64-bit float + 32 บิต padding หรือ 64 บิต mantissa 64 บิตเลขชี้กำลัง 16 บิตและ 16 บิตสำหรับเครื่องหมายและธง [สำหรับการใช้งานที่ไม่ใช่ FPU]
supercat

ระบุว่าfloatและdoubleมีรูปแบบการจัดเก็บและrealเป็นรูปแบบการคำนวณ ในหลาย ๆ ระบบที่ไม่มี FPU การทำงานกับ mantissa, exponent และค่าสถานะที่อยู่บนขอบเขตของคำและครึ่งคำจะเร็วกว่าการแกะและบรรจุใหม่ทุกครั้ง
supercat

2

TL; DR เราไม่ทราบวิธีการคำนวณฟังก์ชั่นส่วนใหญ่ด้วยความแม่นยำที่สมบูรณ์แบบดังนั้นจึงไม่มีจุดแทนตัวเลขที่มีความแม่นยำสมบูรณ์แบบ

คำตอบทั้งหมดพลาดจุดสำคัญที่สุด: เราไม่สามารถคำนวณค่าที่แน่นอนของตัวเลขส่วนใหญ่ได้ ในกรณีพิเศษที่สำคัญเราไม่สามารถคำนวณค่าที่แน่นอนของฟังก์ชันเลขชี้กำลัง - เพื่ออ้างอิงเฉพาะฟังก์ชันที่ไม่มีเหตุผลที่สำคัญที่สุด

ไร้เดียงสาตอบคำถามไร้เดียงสา

ดูเหมือนว่าคำถามของคุณค่อนข้าง“ มีห้องสมุดทางคณิตศาสตร์ที่แน่นอนทำไมเราไม่ใช้พวกเขาในสถานที่ของเลขคณิตจุดลอยตัว?” คำตอบคือคณิตศาสตร์ที่แน่นอนทำงานกับตัวเลขที่มีเหตุผลและ:

  • หมายเลขอาร์คิมีดี - ชื่ออุกอาจของπ - ไม่สมเหตุสมผล
  • ค่าคงที่สำคัญอื่น ๆ จำนวนมากไม่สมเหตุสมผล
  • ค่าคงที่สำคัญอื่น ๆ จำนวนมากยังไม่ทราบว่ามีเหตุผลหรือไม่
  • สำหรับจำนวนตรรกยะที่ไม่เป็นศูนย์xจำนวนexp (x)เป็นจำนวนอตรรกยะ
  • ข้อความที่คล้ายกันมีไว้สำหรับอนุมูลลอการิทึมและความมั่งคั่งของหน้าที่สำคัญต่อนักวิทยาศาสตร์ (การกระจายของ Gauss, CDF, ฟังก์ชัน Bessel, ฟังก์ชันออยเลอร์, ... )

จำนวนตรรกยะเป็นอุบัติเหตุที่โชคดี ตัวเลขส่วนใหญ่ไม่ใช่เหตุผล (ดูทฤษฎีบทของ Baire) ดังนั้นการคำนวณตัวเลขจะนำเราออกจากโลกที่มีเหตุผลเสมอ

การคำนวณและการแทนตัวเลขคืออะไร

เราอาจตอบโต้ด้วยการพูดว่า“ ตกลงปัญหาคือว่าตัวเลขที่มีเหตุผลไม่ใช่ตัวเลือกที่ยอดเยี่ยมในการเป็นตัวแทนของจำนวนจริง” จากนั้นเราก็รวมกลุ่มทาสเดเบียนและคิดค้นระบบตัวแทนใหม่สำหรับตัวเลขจริง

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

ปัญหาคือวิธีเดียวที่จะแสดงตัวเลขในระบบได้อย่างสมบูรณ์คือใช้รูปแบบสัญลักษณ์นั่นคือไม่ต้องคำนวณอะไรเลยและทำงานกับนิพจน์เชิงพีชคณิต นี่เป็นการแทนตัวเลขจริงที่พิการเนื่องจากเราไม่สามารถเปรียบเทียบตัวเลขสองตัวได้อย่างน่าเชื่อถือ (อันไหนที่มากกว่า) เราไม่สามารถตอบคำถามได้ง่าย ๆ “ ตัวเลขที่ให้มาเท่ากับ 0 หรือไม่”

หากคุณมองหาความหมายและปัญหาทางคณิตศาสตร์ที่แม่นยำยิ่งขึ้นให้มองหาจำนวนตรรกยะจำนวนยอดเยี่ยมการประมาณที่ดีที่สุดและทฤษฎีบทของ Baire เป็นต้น


ฉันคิดว่านี่เป็นคำตอบที่ดีไม่ใช่แค่คำถามนี้ตราบเท่าที่ฉันไม่มั่นใจว่าผู้ถามจะเข้าใจประเด็นที่คุณกำลังทำอยู่ สิ่งนั้นและคุณค่อนข้างคล่องแคล่วกับการแสดงตัวเลขที่ไม่แน่นอนของ \ Real หรือ \ Complex โดยการแสดงแบบดิจิตอลที่มีขอบเขต จำกัด (ไม่ว่าจะมีความกว้างบิตแบบไดนามิกหรือแบบคงที่) นั่นเป็นความจริงทั้งหมด แต่ข้างประเด็น ความรุ่งโรจน์ที่ไม่ได้อ้างถึงหุ่นยนต์พันธมิตร Goldberg :) และทฤษฎีบทของ Baire ไม่ได้เป็นส่วนหนึ่งของวาทศาสตร์ทั่วไปที่พบในโปรแกรมเมอร์หรือ StackOverflow
mctylr

0

เพราะ

1) ผู้เขียนตั้งสมมติฐานว่า "การคำนวณทางวิศวกรรมและวิทยาศาสตร์" วัดปริมาณทางกายภาพในโลกแห่งความเป็นจริง

2) ปริมาณทางกายภาพนั้นต่อเนื่องและตามที่คุณระบุ "หมายเลขจุดลอยตัวช่วยให้คุณจำลองปริมาณอย่างต่อเนื่อง"

.. และคำตอบที่เหลือของฉันถูกสรุปโดย Rufflewindดังนั้นฉันจะไม่พูดซ้ำอีก


0

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

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

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

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

การเขียนโปรแกรมภาษาเช่น C หรือ Fortran ทำให้ยากต่อการเข้าถึงการดำเนินงานพื้นฐานเช่นการคูณความแม่นยำแบบผสมและการหารหรือบิตการดำเนินการสำหรับการบวก / การลบและเป็นพื้นฐานสำหรับการสร้างเกินจำนวนความแม่นยำที่ จำกัด

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


0

ฉันคิดว่าสิ่งนี้สามารถตอบได้โดยระบุว่าแอปพลิเคชันfloat/ doubleประเภทข้อมูลใดที่ไม่เหมาะสม

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

ดังนั้นหนึ่งโดเมนที่ไม่ควรใช้ชนิดข้อมูลจุดลอยตัวคือด้านการเงิน * สำหรับระบบหลักเช่นธนาคารมันจะไม่สามารถยอมรับได้อย่างสมบูรณ์หากจำนวนเงินที่ควรได้รับ $ 100000.01 ก็กลายเป็น $ 100000.00 หรือ $ 100000.02

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

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

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

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