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

30
คณิตศาสตร์เลขทศนิยมถูกหักหรือไม่
Наэтотвопросестьответына กองมากเกินнарусском : Вычисленияначислахсплавающейточкойнеработают พิจารณารหัสต่อไปนี้: 0.1 + 0.2 == 0.3 -> false 0.1 + 0.2 -> 0.30000000000000004 ทำไมความไม่ถูกต้องเหล่านี้เกิดขึ้น

11
มันอันตรายแค่ไหนในการเปรียบเทียบค่าทศนิยม
ฉันรู้ว่าUIKitใช้CGFloatเพราะระบบพิกัดความละเอียดอิสระ แต่ทุกครั้งที่ผมต้องการตรวจสอบเช่นถ้าframe.origin.xเป็น0มันทำให้ฉันรู้สึกป่วย if (theView.frame.origin.x == 0) { // do important operation } ไม่ได้เป็นCGFloatความเสี่ยงที่จะบวกเท็จเมื่อเทียบกับ==, <=, >=, <, >? มันเป็นจุดลอยตัวและพวกเขามีปัญหาที่ไม่แม่นยำ0.0000000000041เช่น: การObjective-Cจัดการภายในนี้เกิดขึ้นเมื่อทำการเปรียบเทียบหรือเกิดขึ้นที่สิ่งorigin.xที่อ่านเป็นศูนย์ไม่ได้เปรียบเทียบกับ0ความจริง


21
มีอะไรผิดปกติกับการใช้ == เพื่อเปรียบเทียบลอยใน Java?
ตามหน้า java.sun นี้ ==คือโอเปอเรเตอร์การเปรียบเทียบความเท่าเทียมกันสำหรับหมายเลขทศนิยมใน Java อย่างไรก็ตามเมื่อฉันพิมพ์รหัสนี้: if(sectionID == currentSectionID) ในเครื่องมือแก้ไขของฉันและเรียกใช้การวิเคราะห์แบบสแตติกฉันได้รับ: "JAVA0078 ค่าทศนิยมเมื่อเทียบกับ ==" เกิดอะไรขึ้นกับการใช้==เพื่อเปรียบเทียบค่าทศนิยม วิธีที่ถูกต้องในการทำคืออะไร?

4
ทำไมค่าทศนิยมของ 4 * 0.1 ดูดีใน Python 3 แต่ 3 * 0.1 ไม่ได้?
ฉันรู้ว่าทศนิยมส่วนใหญ่ไม่ได้เป็นตัวแทนลอยจุดที่แน่นอน ( ลอยคณิตศาสตร์จุดเสีย? ) แต่ฉันไม่เห็นสาเหตุที่4*0.1พิมพ์ออกมาเป็นอย่างดี0.4แต่3*0.1ไม่ใช่เมื่อค่าทั้งสองมีการแสดงทศนิยมที่น่าเกลียด: >>> 3*0.1 0.30000000000000004 >>> 4*0.1 0.4 >>> from decimal import Decimal >>> Decimal(3*0.1) Decimal('0.3000000000000000444089209850062616169452667236328125') >>> Decimal(4*0.1) Decimal('0.40000000000000002220446049250313080847263336181640625')

12
เป็นไปได้ไหมที่จะได้ 0 โดยการลบเลขทศนิยมสองตัวที่ไม่เท่ากัน?
เป็นไปได้ไหมที่จะหารด้วย 0 (หรืออินฟินิตี้) ในตัวอย่างต่อไปนี้ public double calculation(double a, double b) { if (a == b) { return 0; } else { return 2 / (a - b); } } ในกรณีปกติจะไม่แน่นอน แต่สิ่งที่ถ้าaและbมีความใกล้ชิดสามารถ(a-b)ส่งผลในการเป็น0เนื่องจากความแม่นยำของการคำนวณ? โปรดทราบว่าคำถามนี้ใช้สำหรับ Java แต่ฉันคิดว่ามันจะใช้ได้กับภาษาโปรแกรมส่วนใหญ่

27
ตัดทอน (ไม่ปัดเศษ) ตัวเลขทศนิยมในจาวาสคริปต์
ฉันกำลังพยายามตัดทอนตัวเลขทศนิยมให้เป็นทศนิยม สิ่งนี้: 5.467 -> 5.46 985.943 -> 985.94 toFixed(2)ไม่เกี่ยวกับสิ่งที่ถูกต้อง แต่จะปัดเศษค่า ฉันไม่ต้องการให้ค่าถูกปัดเศษ หวังว่าสิ่งนี้จะเป็นไปได้ในจาวาสคริปต์

4
อะไรคือคู่ที่ใกล้เคียงที่สุดกับ 1.0 นั่นไม่ใช่ 1.0
มีวิธีทางโปรแกรมในการรับ double ที่ใกล้เคียงกับ 1.0 มากที่สุด แต่จริงๆแล้วไม่ใช่ 1.0 หรือไม่? วิธีแฮ็ควิธีหนึ่งในการทำเช่นนี้คือการ memcpy สองเท่าให้เป็นจำนวนเต็มขนาดเท่ากันแล้วลบออก วิธีการทำงานของรูปแบบจุดลอยตัวของ IEEE754 สิ่งนี้จะจบลงด้วยการลดเลขชี้กำลังทีละหนึ่งในขณะที่เปลี่ยนส่วนเศษส่วนจากศูนย์ทั้งหมด (1.000000000000) เป็นค่าทั้งหมด (1.111111111111) อย่างไรก็ตามมีเครื่องจักรที่เก็บจำนวนเต็ม little-endian ในขณะที่ floating-point ถูกจัดเก็บ big-endian ดังนั้นจึงไม่สามารถใช้ได้เสมอไป
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.