คำถามติดแท็ก floating-point

7
คุณใช้โฟลตเมื่อใดและเมื่อไหร่ที่คุณจะใช้สองครั้ง
บ่อยครั้งในประสบการณ์การเขียนโปรแกรมของฉันฉันต้องตัดสินใจว่าฉันควรใช้ทศนิยมหรือสองเท่าสำหรับจำนวนจริงของฉัน บางครั้งฉันไปลอยบางครั้งฉันไปสำหรับสองครั้ง แต่จริง ๆ แล้วรู้สึกส่วนตัวมากกว่านี้ ถ้าฉันจะเผชิญหน้าเพื่อปกป้องการตัดสินใจของฉันฉันอาจจะไม่ให้เหตุผลที่ดี คุณใช้โฟลตเมื่อใดและเมื่อไหร่ที่คุณจะใช้สองเท่า คุณมักจะใช้สองครั้งต่อเมื่อมีข้อ จำกัด ของหน่วยความจำเกิดขึ้นและคุณจะต้องลอยตัว หรือคุณใช้งานแบบลอยตลอดเว้นแต่ความต้องการความแม่นยำต้องการให้คุณใช้สองเท่าหรือไม่ มีความแตกต่างอย่างมากเกี่ยวกับความซับซ้อนในการคำนวณของเลขคณิตพื้นฐานระหว่าง float และ double หรือไม่? ข้อดีและข้อเสียของการใช้ float หรือ double คืออะไร และคุณยังใช้คู่ยาวหรือไม่
194 c++  c  floating-point  numbers 

6
เหตุใดจึงยังคงเป็นส่วนหนึ่งของภาษา Java เมื่อแนะนำเป็นสองเท่าแทน?
ในทุกที่ที่ฉันดูมันบอกว่าdoubleมันยอดเยี่ยมกว่าfloatในเกือบทุกด้าน floatถูกทำให้ล้าสมัยโดยdoubleใน Java ดังนั้นทำไมมันยังคงใช้? ฉันเขียนโปรแกรมเป็นจำนวนมากกับ Libgdx และพวกเขาบังคับให้คุณใช้float(deltaTime, ฯลฯ ) แต่ดูเหมือนว่าสำหรับฉันแล้วdoubleมันจะง่ายกว่าที่จะทำงานด้วยในแง่ของการจัดเก็บและหน่วยความจำ ฉันยังอ่านเมื่อคุณใช้การลอยและเมื่อคุณใช้สองครั้งแต่ถ้าfloatเป็นจริงที่ดีสำหรับตัวเลขที่มีตัวเลขจำนวนมากหลังจากจุดทศนิยมแล้วทำไมเราไม่สามารถใช้หนึ่งในหลายรูปแบบของdouble? มีเหตุผลว่าทำไมคนอื่นยืนยันที่จะใช้ลอยแม้ว่ามันจะไม่ได้ประโยชน์อีกต่อไป? มันเป็นงานมากเกินไปที่จะเปลี่ยนแปลงทั้งหมดหรือไม่

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

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

3
มีตัวเลขที่ไม่สามารถแทนได้ในฐาน 10 แต่สามารถแสดงในฐาน 2 ได้หรือไม่
C#มีdecimalประเภทที่ใช้สำหรับตัวเลขที่ต้องการการแทนค่าที่แน่นอนในฐาน 10 ตัวอย่างเช่น0.1ไม่สามารถแสดงในฐาน 2 (เช่นfloatและdouble) และจะเป็นการประมาณเสมอเมื่อเก็บไว้ในตัวแปรที่เป็นประเภทเหล่านี้ ฉันสงสัยว่าข้อเท็จจริงที่ตรงกันข้ามนั้นเป็นไปได้หรือไม่ มีตัวเลขที่ไม่สามารถแทนได้ในฐาน 10 แต่สามารถแสดงในฐาน 2 (ในกรณีนี้ฉันต้องการใช้ a floatแทน a decimalเพื่อจัดการกับมัน) หรือไม่?

13
มีทางเลือกให้บิต?
มีทางเลือกให้บิตเป็นหน่วยข้อมูลที่เล็กที่สุดหรือไม่? มีบางสิ่งที่ไม่เพียง 0 หรือ 1 แต่จริงๆแล้วมีสถานะเป็นไปได้หลายอย่างในระหว่างนั้น การเก็บโฟลตแบบนั้นจะเป็นเรื่องปกติหรือไม่?

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

8
การเปรียบเทียบความเท่าเทียมกันของจำนวนลอยเข้าใจผิดนักพัฒนารุ่นน้องแม้ว่าจะไม่มีข้อผิดพลาดในการปัดเศษในกรณีของฉันหรือไม่?
ตัวอย่างเช่นฉันต้องการแสดงรายการปุ่มจาก 0,0.5, ... 5 ซึ่งข้ามไปแต่ละ 0.5 ฉันใช้สำหรับการวนรอบเพื่อทำเช่นนั้นและมีสีที่แตกต่างกันที่ปุ่ม STANDARD_LINE: var MAX=5.0; var DIFF=0.5 var STANDARD_LINE=1.5; for(var i=0;i<=MAX;i=i+DIFF){ button.text=i+''; if(i==STANDARD_LINE){ button.color='red'; } } ในกรณีนี้ไม่ควรมีข้อผิดพลาดในการปัดเศษเนื่องจากค่าแต่ละค่าเป็นค่าที่แน่นอนใน IEEE 754 แต่ฉันกำลังลำบากถ้าฉันควรเปลี่ยนเพื่อหลีกเลี่ยงการเปรียบเทียบความเท่าเทียมกันของทศนิยม var MAX=10; var STANDARD_LINE=3; for(var i=0;i<=MAX;i++){ button.text=i/2.0+''; if(i==STANDARD_LINE/2.0){ button.color='red'; } } ในมือข้างหนึ่งรหัสดั้งเดิมนั้นเรียบง่ายกว่าและส่งต่อมาให้ฉัน แต่มีสิ่งหนึ่งที่ฉันกำลังพิจารณา: i == STANDARD_LINE ทำให้เข้าใจผิดว่าเป็นเพื่อนร่วมทีมของจูเนียร์หรือไม่? มันซ่อนข้อเท็จจริงที่ว่าตัวเลขจุดลอยตัวอาจมีข้อผิดพลาดในการปัดเศษหรือไม่ หลังจากอ่านความคิดเห็นจากโพสต์นี้: https://stackoverflow.com/questions/33646148/is-hardcode-float-precise-if-it-can-be-represented-by-binary-format-in-ieee-754 ดูเหมือนว่ามีนักพัฒนาหลายคนไม่ทราบว่าตัวเลขลอยตัวบางอย่างแน่นอน ฉันควรหลีกเลี่ยงการเปรียบเทียบความเท่าเทียมกันของจำนวนทศนิยมแม้ว่าจะถูกต้องในกรณีของฉัน หรือฉันกำลังคิดถึงเรื่องนี้อยู่

12
ทำไมคุณต้องลอย / สองครั้ง?
ฉันดูhttp://www.joelonsoftware.com/items/2011/06/27.htmlและหัวเราะเยาะจอน Skeet ตลก ๆ ประมาณ 0.3 ไม่ใช่ 0.3 ฉันเองไม่เคยมีปัญหากับการลอย / ทศนิยม / คู่ แต่ฉันจำได้ว่าฉันเรียนรู้ 6502 เร็วมากและไม่จำเป็นต้องลอยในโปรแกรมส่วนใหญ่ของฉัน ครั้งเดียวที่ฉันใช้มันสำหรับกราฟิกและคณิตศาสตร์ที่ตัวเลขไม่ถูกต้องก็โอเคและผลลัพธ์สำหรับหน้าจอและไม่ถูกเก็บไว้ (ในฐานข้อมูลไฟล์) หรือขึ้นอยู่กับ คำถามของฉันคือสถานที่ที่คุณมักจะใช้ทุ่น / ทศนิยม / สองครั้งที่ไหน? ดังนั้นฉันรู้ที่จะระวัง gotchas เหล่านี้ ด้วยเงินฉันใช้ longs และเก็บค่าเป็นเปอร์เซ็นต์สำหรับความเร็วของวัตถุในเกมที่ฉันเพิ่ม ints และหาร (หรือ bithift) ค่าเพื่อทราบว่าฉันต้องการย้ายพิกเซลหรือไม่ (ฉันทำการเคลื่อนที่วัตถุใน 6502 วันเราไม่มีการหารหรือลอย แต่มีการเปลี่ยนแปลง) ดังนั้นฉันส่วนใหญ่อยากรู้อยากเห็น

5
เมื่อการแปลงจากจำนวนเต็มเป็นโสดอาจสูญเสียความแม่นยำ
ฉันกำลังอ่านบทความจาก Microsoft เกี่ยวกับการขยับขยายการแปลงและตัวเลือกเข้มงวดเมื่อฉันไปถึงส่วน การแปลงต่อไปนี้อาจสูญเสียความแม่นยำ: จำนวนเต็มเป็นโสด ยาวเป็นโสดหรือสองเท่า ทศนิยมเป็นเดี่ยวหรือคู่ อย่างไรก็ตามการแปลงเหล่านี้จะไม่สูญเสียข้อมูลหรือขนาด .. แต่ตามบทความอื่นเกี่ยวกับชนิดข้อมูล , ประเภทจำนวนเต็มสามารถจัดเก็บได้ตั้งแต่ -2.147.483.648 ถึง 2.147.483.647 และ ประเภทเดียวสามารถเก็บได้จาก 1,401298E-45 ถึง 3,4028235E + 38 สำหรับตัวเลขบวก และ -3,4028235E + 38 ถึง - 1,401298E-45 สำหรับจำนวนลบ .. ดังนั้น Single สามารถเก็บตัวเลขได้มากกว่าจำนวนเต็ม ฉันไม่เข้าใจว่าสถานการณ์เช่นนี้จากการแปลงเป็นจำนวนเต็มอาจไม่แม่นยำ มีคนอธิบายได้ไหม

2
ทุกคนสามารถอธิบายการเป็นตัวแทนของโฟลตในหน่วยความจำได้หรือไม่?
นี่ไม่ใช่คำถามซ้ำซ้อนเมื่อฉันอ่านคำถามก่อนหน้า how float values are stored in the memoryทุกคนสามารถช่วยในการทำความเข้าใจ ข้อสงสัยของฉันอยู่ที่นี่ค่าลอยมี ' .'( for example 3.45) วิธี'.'จะแสดงในหน่วยความจำ? ใครช่วยอธิบายแผนที่ด้วยฉันได้ไหม?

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

6
วิธีใช้การแฮชแบบลอยด้วยความเท่าเทียมกันโดยประมาณ
สมมติว่าเรามีคลาส Python ดังต่อไปนี้ (ปัญหามีอยู่ใน Java เช่นเดียวกับequalsและhashCode) class Temperature: def __init__(self, degrees): self.degrees = degrees ที่degreesเป็นอุณหภูมิเคลวินเป็นลอยที่ ตอนนี้ฉันต้องการที่จะใช้การทดสอบความเท่าเทียมกันและ hashing Temperatureในทางที่ เปรียบเทียบลอยขึ้นกับความแตกต่าง epsilon แทนการทดสอบความเท่าเทียมกันโดยตรง และได้รับเกียรตินิยมสัญญาว่าหมายถึงa == bhash(a) == hash(b) def __eq__(self, other): return abs(self.degrees - other.degrees) < EPSILON def __hash__(self): return # What goes here? เอกสาร Python พูดถึงตัวเลขการแฮชเล็กน้อยเพื่อให้แน่ใจว่าhash(2) == hash(2.0)นี่ไม่ใช่ปัญหาเดียวกัน ฉันยังอยู่ในเส้นทางที่ถูกต้องหรือไม่? และถ้าเป็นเช่นนั้นวิธีมาตรฐานในการใช้การแฮชในสถานการณ์นี้คืออะไร? ปรับปรุง …

2
Lua จัดการกับทั้งจำนวนเต็มและจำนวนลอยได้อย่างไร
เท่าที่ฉันจำได้ว่าตัวเองเขียนโปรแกรมฉันได้รับการสอนไม่ให้เปรียบเทียบจำนวนจุดลอยตัวเพื่อความเท่าเทียมกัน ตอนนี้ในขณะที่อ่านการเขียนโปรแกรมใน Luaเกี่ยวกับnumberประเภทLua ฉันพบต่อไปนี้: ประเภทหมายเลขแสดงถึงจำนวนจริง (ทศนิยมสองตำแหน่งที่มีความแม่นยำ) Lua ไม่มีประเภทจำนวนเต็มเนื่องจากไม่ต้องการ มีความเข้าใจผิดอย่างกว้างขวางเกี่ยวกับข้อผิดพลาดทางเลขทศนิยมและบางคนกลัวว่าแม้การเพิ่มขึ้นอย่างง่ายสามารถไปแปลก ๆ กับตัวเลขจุดลอยตัว ความจริงก็คือเมื่อคุณใช้ double เพื่อแทนค่าจำนวนเต็มจะไม่มีข้อผิดพลาดในการปัดเศษเลย (เว้นแต่ว่าจำนวนจะมากกว่า 100,000,000,000,000) โดยเฉพาะอย่างยิ่งหมายเลข Lua สามารถแสดงจำนวนเต็มที่มีความยาวใด ๆ โดยไม่มีปัญหาการปัดเศษ ยิ่งไปกว่านั้นซีพียูที่ทันสมัยส่วนใหญ่ทำเลขคณิตทศนิยมให้เร็วที่สุด (หรือเร็วกว่า) เลขจำนวนเต็ม เป็นจริงสำหรับทุกภาษาหรือไม่ โดยพื้นฐานถ้าเราไม่ไปเกินจุดลอยเป็นสองเท่าเราจะปลอดภัยในเลขคณิตจำนวนเต็มหรือไม่ หรือเพื่อให้สอดคล้องกับชื่อคำถามมีอะไรพิเศษที่ Lua ทำกับnumberประเภทของมันดังนั้นมันจึงทำงานได้ดีทั้งแบบจำนวนเต็มและจุดลอยตัว?

1
ความแม่นยำโดยนัยของฟังก์ชันเลขทศนิยม
ในขณะที่ตรวจสอบการใช้งานฟังก์ชั่นของโปรแกรมเมอร์อื่นเพื่อคำนวณ CDF การแจกแจงแบบปกติฉันได้แนะนำให้แทนที่การใช้งานทั้งหมดด้วยฟังก์ชันในตัวของ Python หรือใช้ SciPy ซึ่งเป็นห้องสมุดวิทยาศาสตร์ทั่วไป โปรแกรมเมอร์อีกชี้ให้เห็นว่าค่าmath.erfc()มิได้scipy.stats.norm.cdf()ให้การค้ำประกันความแม่นยำใด ๆ ในเอกสารของพวกเขา ดังนั้นฉันจึงควรระมัดระวังเกี่ยวกับการเปลี่ยนอัลกอริทึมการประมาณ (ซึ่งนำมาจากแหล่งที่ได้รับการเคารพและมีขอบเขตข้อผิดพลาดที่เป็นเอกสาร ) ความจริงแล้วความคิดที่จะสงสัยความถูกต้องและแม่นยำของฟังก์ชั่นในตัวหรือห้องสมุดไม่เคยข้ามความคิดของฉัน หลังจากที่ทุกคนฉันได้รับการเรียกฟังก์ชั่นเหมือนsin()และsqrt()สำหรับปีโดยไม่ต้องคิดมาก - เหตุผลที่ควรmath.erf()หรือscipy.stats.norm.cdf()จะแตกต่างกันหรือไม่? แต่ตอนนี้ฉันกังวล คำถามของฉันคือ: โดยทั่วไปหากเอกสารไม่มีการกล่าวถึงเป็นพิเศษแสดงว่าฟังก์ชั่นเหล่านี้มีความถูกต้องสมบูรณ์ในตำแหน่งทศนิยมสุดท้ายภายในความแม่นยำที่นำเสนอโดยทศนิยมความแม่นยำสองเท่าของ IEEE หรือไม่? นั่นเป็นเรื่องจริงสำหรับ Python math.erf()หรือ SciPy scipy.stats.norm.cdf()หรือไม่? คุณจะบอกได้อย่างไร นี้หน้าคนสำหรับsin()กล่าวว่า ... ฟังก์ชั่นเหล่านี้อาจสูญเสียความแม่นยำเมื่อข้อโต้แย้งของพวกเขาอยู่ใกล้กับหลาย pi หรืออยู่ห่างจาก 0.0 ทำไมคำเตือนควรมีอยู่เมื่อฟังก์ชันไซน์เป็นคาบและสมมาตร ดูเหมือนว่าจะมีภาระที่ผู้เรียกเข้ารับการป้อนข้อมูลเป็นมาตรฐานเพื่อให้ได้ความแม่นยำสูงสุด ในทางตรงกันข้ามเอกสารของ Mozilla สำหรับMath.sin()บอกว่าไม่มีอะไรเกี่ยวกับความถูกต้องหรือความแม่นยำ นั่นหมายความว่ามันถูกต้องสมบูรณ์หรือเป็น "ความรู้ทั่วไป" ที่Math.sin()จะแม่นยำในบางสถานการณ์ใน JavaScript เช่นที่อื่นหรือไม่

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