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

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

5
ตัวเลขจุดลอยตัวแบบแข็งและแบบอ่อนต่างกันอย่างไร
เมื่อฉันคอมไพล์โค้ด C ด้วย cross toolchain ตัวเชื่อมโยงจะพิมพ์หน้าคำเตือนโดยบอกว่าไฟล์ปฏิบัติการของฉันใช้ฮาร์ดโฟล แต่ libc ของฉันใช้ซอฟต์โฟล อะไรคือความแตกต่าง?
99 c  linux  floating-point  arm  libc 

7
คำเตือน C ++: การหารสองด้วยศูนย์
กรณีที่ 1: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0.0)<<std::endl; } มันรวบรวมโดยไม่มีคำเตือนใด ๆ infและภาพพิมพ์ ตกลง C ++ สามารถจัดการการหารด้วยศูนย์ได้ ( ดูสด ) แต่, กรณีที่ 2: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0)<<std::endl; } คอมไพเลอร์ให้คำเตือนต่อไปนี้ ( ดูสด ): warning: division by zero [-Wdiv-by-zero] std::cout<<(d/0)<<std::endl; เหตุใดคอมไพเลอร์จึงแจ้งเตือนในกรณีที่สอง คือ0 != …

10
แปลง float เป็นสองเท่าโดยไม่สูญเสียความแม่นยำ
ฉันมีลูกลอยดั้งเดิมและฉันต้องการเป็นคู่ดั้งเดิม เพียงแค่การลอยตัวเป็นสองเท่าทำให้ฉันมีความแม่นยำเป็นพิเศษ ตัวอย่างเช่น: float temp = 14009.35F; System.out.println(Float.toString(temp)); // Prints 14009.35 System.out.println(Double.toString((double)temp)); // Prints 14009.349609375 อย่างไรก็ตามหากแทนที่จะทำการแคสต์ฉันจะส่งออก float เป็นสตริงและแยกวิเคราะห์สตริงเป็นคู่ฉันจะได้สิ่งที่ต้องการ System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // Prints 14009.35 มีวิธีที่ดีกว่าการไปที่ String และย้อนกลับหรือไม่?

6
เลขคู่ระหว่าง 0.0 ถึง 1.0 มีกี่ตัว?
นี่เป็นสิ่งที่อยู่ในความคิดของฉันมาหลายปีแล้ว แต่ฉันไม่เคยใช้เวลาถามมาก่อน เครื่องกำเนิดตัวเลขสุ่ม (หลอก) จำนวนมากสร้างตัวเลขสุ่มระหว่าง 0.0 ถึง 1.0 ในทางคณิตศาสตร์มีจำนวนอนันต์ในช่วงนี้ แต่doubleเป็นจำนวนจุดลอยตัวดังนั้นจึงมีความแม่นยำ จำกัด ดังนั้นคำถามคือ: มีกี่doubleตัวเลขระหว่าง 0.0 ถึง 1.0? มีจำนวนระหว่าง 1 ถึง 2 หรือไม่? ระหว่าง 100 ถึง 101? ระหว่าง 10 ^ 100 ถึง 10 ^ 100 + 1? หมายเหตุ: ถ้ามันสร้างความแตกต่างฉันสนใจคำจำกัดความของ Java เป็นdoubleพิเศษ

18
พิมพ์ลอยใน python สวย ๆ ง่ายๆ?
ฉันมีรายชื่อลอย ถ้าฉันพูดง่ายๆprintมันจะแสดงแบบนี้: [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006] ฉันสามารถใช้print "%.2f"ซึ่งจะต้องใช้การforวนซ้ำเพื่อสำรวจรายการ แต่จะใช้ไม่ได้กับโครงสร้างข้อมูลที่ซับซ้อนมากขึ้น ฉันต้องการอะไรสักอย่าง (ฉันกำลังสร้างมันขึ้นมาทั้งหมด) >>> import print_options >>> print_options.set_float_precision(2) >>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006] [9.0, 0.05, 0.03, 0.01, 0.06, 0.08]

8
คอมไพเลอร์ JIT ของ JVM สร้างโค้ดที่ใช้คำแนะนำจุดลอยตัวแบบเวกเตอร์หรือไม่
สมมติว่าปัญหาคอขวดของโปรแกรม Java ของฉันคือลูปที่แน่นพอที่จะคำนวณผลิตภัณฑ์จุดเวกเตอร์จำนวนมาก ใช่ฉันได้ทำโปรไฟล์แล้วใช่มันเป็นคอขวดใช่มันสำคัญใช่นั่นเป็นเพียงวิธีการที่อัลกอริทึมใช่ฉันใช้ Proguard เพื่อเพิ่มประสิทธิภาพโค้ดไบต์ ฯลฯ งานคือโดยพื้นฐานแล้วผลิตภัณฑ์ดอท เช่นเดียวกับฉันมีสองfloat[50]และฉันต้องคำนวณผลรวมของผลิตภัณฑ์คู่กัน ฉันรู้ว่าชุดคำสั่งโปรเซสเซอร์มีอยู่เพื่อดำเนินการประเภทนี้อย่างรวดเร็วและจำนวนมากเช่น SSE หรือ MMX ใช่ฉันสามารถเข้าถึงสิ่งเหล่านี้ได้โดยการเขียนโค้ดเนทีฟใน JNI การโทรของ JNI นั้นค่อนข้างแพง ฉันรู้ว่าคุณไม่สามารถรับประกันได้ว่า JIT จะรวบรวมหรือไม่รวบรวมอะไร มีใครเคยได้ยินเกี่ยวกับรหัสสร้าง JIT ที่ใช้คำแนะนำเหล่านี้หรือไม่? และถ้าเป็นเช่นนั้นมีอะไรเกี่ยวกับโค้ด Java ที่ช่วยให้คอมไพล์ได้ด้วยวิธีนี้หรือไม่? น่าจะเป็น "ไม่"; คุ้มค่าที่จะถาม

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

10
ฉันจะปรับปรุงประสิทธิภาพผ่านแนวทางระดับสูงได้อย่างไรเมื่อใช้สมการแบบยาวใน C ++
ฉันกำลังพัฒนาแบบจำลองทางวิศวกรรมบางอย่าง สิ่งนี้เกี่ยวข้องกับการใช้สมการยาวบางอย่างเช่นสมการนี้เพื่อคำนวณความเค้นในวัสดุเช่นยาง: T = ( mu * ( pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a * ( pow(l1 * l2 * l3, -0.1e1 / 0.3e1) - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1 ) * …




2
การเพิ่มประสิทธิภาพจุดลอยตัวนี้อนุญาตหรือไม่
ฉันพยายามตรวจสอบว่าที่ไหนfloatสูญเสียความสามารถในการแทนจำนวนเต็มจำนวนมาก ฉันจึงเขียนตัวอย่างเล็ก ๆ น้อย ๆ นี้: int main() { for (int i=0; ; i++) { if ((float)i!=i) { return i; } } } ดูเหมือนว่าโค้ดนี้จะใช้ได้กับคอมไพเลอร์ทั้งหมดยกเว้นเสียงดัง เสียงดังสร้างการวนซ้ำที่ไม่สิ้นสุดที่เรียบง่าย Godbolt . อนุญาตหรือไม่ ถ้าใช่มันเป็นปัญหา QoI หรือไม่?


14
Swift - จะลบทศนิยมออกจากทศนิยมได้อย่างไรถ้าทศนิยมเท่ากับ 0?
ฉันกำลังแสดงระยะทางด้วยทศนิยมหนึ่งตำแหน่งและฉันต้องการลบทศนิยมนี้ในกรณีที่มีค่าเท่ากับ 0 (เช่น 1200.0Km) ฉันจะทำอย่างรวดเร็วได้อย่างไร ฉันแสดงหมายเลขนี้ดังนี้: let distanceFloat: Float = (currentUser.distance! as NSString).floatValue distanceLabel.text = String(format: "%.1f", distanceFloat) + "Km"

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.