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

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

21
รักษาความแม่นยำด้วย double ใน Java
public class doublePrecision { public static void main(String[] args) { double total = 0; total += 5.6; total += 5.8; System.out.println(total); } } พิมพ์รหัสข้างต้น: 11.399999999999 ฉันจะได้รับสิ่งนี้เพื่อพิมพ์ (หรือใช้เป็น) 11.4 ได้อย่างไร

12
วิธีการระงับสัญลักษณ์ทางวิทยาศาสตร์เมื่อพิมพ์ค่าทศนิยม?
นี่คือรหัสของฉัน: x = 1.0 y = 100000.0 print x/y 1.00000e-05แสดงความฉลาดของฉันเป็น มีวิธีใดที่จะระงับสัญกรณ์ทางวิทยาศาสตร์และทำให้มันแสดงเป็น 0.00001? ฉันจะใช้ผลลัพธ์เป็นสตริง

2
คณิตศาสตร์ที่รวดเร็วของ gcc ทำอะไรได้จริง?
ฉันเข้าใจว่าการ--ffast-mathตั้งค่าสถานะของ gcc สามารถเพิ่มความเร็วได้อย่างมากสำหรับ ops แบบลอยตัวและออกไปนอกมาตรฐาน IEEE แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นจริงได้เมื่อเปิดใช้งาน ใครช่วยกรุณาอธิบายรายละเอียดบางอย่างและอาจให้ตัวอย่างที่ชัดเจนว่าจะมีการเปลี่ยนแปลงอย่างไรถ้าธงเปิดหรือปิด? ฉันพยายามขุดผ่าน SO สำหรับคำถามที่คล้ายกัน แต่ไม่สามารถหาอะไรอธิบายการทำงานของคณิตศาสตร์ได้อย่างรวดเร็ว

7
แปลงหมายเลขทศนิยมเป็นความแม่นยำแน่นอนแล้วคัดลอกไปยังสตริง
135.12345678910ฉันมีจำนวนจุดลอยกล่าวว่า ฉันต้องการที่จะเชื่อมค่าที่เป็นสตริง 135.123456789แต่เพียงต้องการ ด้วยการพิมพ์ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดายโดยทำสิ่งที่ชอบ: print "%.9f" % numvar ด้วยnumvarการเป็นหมายเลขเดิมของฉัน มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?

11
แสดงทศนิยมสองตำแหน่งใน Python
ฉันมีฟังก์ชันที่รับอาร์กิวเมนต์แบบลอย (โดยทั่วไปจะเป็นจำนวนเต็มหรือทศนิยมที่มีเลขนัยสำคัญหนึ่งหลัก) และฉันจำเป็นต้องส่งออกค่าในสตริงที่มีทศนิยมสองตำแหน่ง (5 -> 5.00, 5.5 -> 5.50 เป็นต้น) ฉันจะทำสิ่งนี้ใน Python ได้อย่างไร

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 แต่ฉันคิดว่ามันจะใช้ได้กับภาษาโปรแกรมส่วนใหญ่

12
เหตุใด C จึงไม่มีลอยที่ไม่ได้ลงชื่อ
ฉันรู้ว่าคำถามดูเหมือนจะแปลก โปรแกรมเมอร์บางครั้งก็คิดมากเกินไป โปรดอ่านต่อ ... ใน CI ใช้signedและunsignedจำนวนเต็มมาก ฉันชอบข้อเท็จจริงที่ว่าคอมไพลเลอร์เตือนฉันหากฉันทำสิ่งต่างๆเช่นการกำหนดจำนวนเต็มที่เซ็นชื่อให้กับตัวแปรที่ไม่ได้ลงชื่อ ฉันได้รับคำเตือนหากเปรียบเทียบเซ็นกับจำนวนเต็มที่ไม่ได้ลงชื่อและอื่น ๆ อีกมากมาย ฉันชอบคำเตือนเหล่านี้ พวกเขาช่วยฉันรักษารหัสของฉันให้ถูกต้อง ทำไมเราไม่มีความหรูหราเหมือนกันสำหรับลอย? รากที่สองจะไม่ส่งกลับจำนวนลบอย่างแน่นอน มีสถานที่อื่น ๆ เช่นกันที่ค่าการลอยตัวเชิงลบไม่มีความหมาย ตัวเลือกที่สมบูรณ์แบบสำหรับการลอยตัวที่ไม่ได้ลงนาม Btw - ฉันไม่ค่อยสนใจเกี่ยวกับความแม่นยำพิเศษเพียงเล็กน้อยที่ฉันจะได้รับโดยการลบบิตเครื่องหมายออกจากโฟลต ฉันมีความสุขมากกับfloatพวกเขาในขณะนี้ ฉันแค่อยากจะทำเครื่องหมายลอยว่าไม่ได้ลงนามในบางครั้งและรับคำเตือนแบบเดียวกับที่ฉันได้รับจากจำนวนเต็ม ฉันไม่ทราบภาษาโปรแกรมใด ๆ ที่รองรับตัวเลขทศนิยมที่ไม่ได้ลงชื่อ มีความคิดว่าทำไมพวกเขาถึงไม่มี? แก้ไข: ฉันรู้ว่า x87 FPU ไม่มีคำแนะนำในการจัดการกับการลอยตัวที่ไม่ได้ลงชื่อ ให้ใช้คำแนะนำลอยที่ลงนาม การใช้ผิดประเภท (เช่นต่ำกว่าศูนย์) อาจถือได้ว่าเป็นพฤติกรรมที่ไม่ได้กำหนดในลักษณะเดียวกับที่ไม่มีการกำหนดจำนวนเต็มที่มีการลงนามมากเกินไป

7
การแสดงออกของ C # ลอย: พฤติกรรมแปลก ๆ เมื่อส่งผลลอยไปยัง int
ฉันมีรหัสง่ายๆดังต่อไปนี้: int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp; speed1และspeed2ควรมีค่าเท่ากัน แต่อันที่จริงฉันมี: speed1 = 61 speed2 = 62 ฉันรู้ว่าฉันควรใช้ Math.Round แทนการคัดเลือกนักแสดง แต่ฉันต้องการที่จะเข้าใจว่าทำไมค่าต่างกัน ฉันดูโค้ดไบต์ที่สร้างขึ้น แต่ยกเว้นร้านค้าและโหลด opcodes เหมือนกัน ฉันยังลองรหัสเดียวกันใน java และฉันได้รับ 62 และ 62 อย่างถูกต้อง มีคนอธิบายเรื่องนี้ได้ไหม แก้ไข: ในรหัสจริงมันไม่ได้โดยตรง 6.2f * 10 แต่ฟังก์ชั่นการโทร * ค่าคงที่ ฉันมีรหัสไบต์ต่อไปนี้: …

10
วิธีจัดการการลอยตัวและตัวคั่นทศนิยมด้วยหมายเลขประเภทอินพุต html5
ฉันกำลังสร้างเว็บแอปซึ่งส่วนใหญ่สำหรับเบราว์เซอร์บนมือถือ ฉันใช้ช่องป้อนข้อมูลที่มีประเภทตัวเลขดังนั้นเบราว์เซอร์มือถือ (ส่วนใหญ่) จึงเรียกใช้แป้นพิมพ์ตัวเลขเท่านั้นเพื่อประสบการณ์การใช้งานที่ดีขึ้น เว็บแอปนี้ส่วนใหญ่จะใช้ในภูมิภาคที่ตัวคั่นทศนิยมเป็นลูกน้ำไม่ใช่จุดดังนั้นฉันต้องจัดการตัวคั่นทศนิยมทั้งสอง จะปกปิดความยุ่งเหยิงทั้งหมดนี้ด้วยจุดและลูกน้ำได้อย่างไร การค้นพบของฉัน: Chrome บนเดสก์ท็อป ประเภทอินพุต = หมายเลข ผู้ใช้ป้อน "4,55" ในช่องป้อนข้อมูล $("#my_input").val(); ส่งคืน "455" ฉันไม่สามารถรับค่าที่ถูกต้องจากการป้อนข้อมูล เดสก์ท็อป Firefox ประเภทอินพุต = หมายเลข ผู้ใช้ป้อน "4,55" ในช่องป้อนข้อมูล $("#my_input").val(); ผลตอบแทน "4,55" ไม่เป็นไรฉันสามารถแทนที่ลูกน้ำด้วยจุดและทำให้ค่าลอยถูกต้องได้ เบราว์เซอร์ Android ประเภทอินพุต = หมายเลข ผู้ใช้ป้อน "4,55" ในช่องป้อนข้อมูล เมื่ออินพุตสูญเสียโฟกัสค่าจะถูกตัดให้เหลือ "4" สร้างความสับสนให้กับผู้ใช้ Windows Phone 8 ประเภทอินพุต = หมายเลข ผู้ใช้ป้อน "4,55" …

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

2
เหตุใด Clang จึงเพิ่มประสิทธิภาพออกไป x * 1.0 แต่ไม่ใช่ x + 0.0
เหตุใด Clang จึงเพิ่มประสิทธิภาพการวนซ้ำในโค้ดนี้ #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", …


19
round () ดูเหมือนจะปัดเศษไม่ถูกต้อง
เอกสารประกอบสำหรับฟังก์ชันround ()ระบุว่าคุณส่งตัวเลขและตำแหน่งที่ผ่านจุดทศนิยมไปจนถึงรอบ ดังนั้นควรทำสิ่งนี้: n = 5.59 round(n, 1) # 5.6 แต่ในความเป็นจริงแล้วความแปลกประหลาดของจุดลอยตัวเก่า ๆ กำลังคืบคลานเข้ามาและคุณจะได้รับ: 5.5999999999999996 สำหรับวัตถุประสงค์ของ UI 5.6ที่ฉันต้องแสดงผล ฉันโผล่ไปทั่วอินเทอร์เน็ตและพบเอกสารบางอย่างที่ขึ้นอยู่กับการใช้งาน Python ของฉัน น่าเสียดายที่สิ่งนี้เกิดขึ้นกับทั้งเครื่อง Windows dev และเซิร์ฟเวอร์ Linux แต่ละเครื่องที่ฉันได้ลองใช้ ดูที่นี่ด้วย ขาดการสร้างห้องสมุดกลมของตัวเองมีวิธีใดบ้าง?

11
เหตุใดฉันจึงใช้ค่าลอยเป็นพารามิเตอร์เทมเพลตไม่ได้
เมื่อฉันพยายามใช้floatเป็นพารามิเตอร์เทมเพลตคอมไพลเลอร์จะร้องหารหัสนี้ในขณะที่intทำงานได้ดี เป็นเพราะฉันไม่สามารถใช้floatเป็นพารามิเตอร์เทมเพลตได้หรือไม่? #include<iostream> using namespace std; template <class T, T defaultValue> class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass <int, 10> gcInteger; GenericClass < float, 4.6f> gcFlaot; cout << "\n sum of integer is …

8
PHP String เพื่อลอย
ฉันไม่คุ้นเคยกับ PHP เลยและมีคำถามสั้น ๆ ฉันมี 2 ตัวแปรpricePerUnitและInvoicedUnits. นี่คือรหัสที่ตั้งค่าเหล่านี้เป็นค่า: $InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits); $pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit); ถ้าฉันส่งออกสิ่งนี้ฉันจะได้ค่าที่ถูกต้อง ให้บอก5000หน่วยที่ออกใบแจ้งหนี้และ1.00ราคา ตอนนี้ฉันต้องแสดงจำนวนเงินทั้งหมดที่ใช้ไป เมื่อฉันคูณสองสิ่งนี้เข้าด้วยกันมันไม่ได้ผล (ตามที่คาดไว้นี่คือสตริง) แต่ฉันไม่รู้วิธีแยกวิเคราะห์ / โยน / แปลงตัวแปรใน PHP ฉันควรทำอย่างไรดี?

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