คำถามติดแท็ก precision

สำหรับคำถามที่เกี่ยวข้องกับความแม่นยำของตัวเลขในการเขียนโปรแกรม เพื่อความแม่นยำในการจัดหมวดหมู่ให้ใช้แท็ก [การเรียกคืนความแม่นยำ]

3
การควบคุมจำนวนหลักทศนิยมในเอาต์พุตการพิมพ์ใน R
มีตัวเลือกใน R เพื่อควบคุมการแสดงผลหลัก ตัวอย่างเช่น: options(digits=10) ควรให้ผลการคำนวณเป็นตัวเลข 10 หลักจนจบเซสชัน R ในไฟล์วิธีใช้ของ R นิยามสำหรับพารามิเตอร์หลักมีดังนี้: หลัก: ควบคุมจำนวนหลักที่จะพิมพ์เมื่อพิมพ์ค่าตัวเลข เป็นการเสนอแนะเท่านั้น ค่าที่ถูกต้องคือ1 ... 22โดยมีค่าเริ่มต้น7 ดังนั้นจึงบอกว่านี่เป็นคำแนะนำเท่านั้น จะเป็นอย่างไรหากฉันต้องการแสดงตัวเลข 10 หลักเสมอไม่มากหรือน้อย? คำถามที่สองของฉันคือถ้าฉันต้องการแสดงตัวเลขมากกว่า 22 หลักเช่นเพื่อการคำนวณที่แม่นยำยิ่งขึ้นเช่น 100 หลัก? เป็นไปได้ไหมกับฐาน R หรือฉันต้องการแพ็คเกจ / ฟังก์ชั่นเพิ่มเติมสำหรับสิ่งนั้น? แก้ไข:ขอบคุณข้อเสนอแนะของ jmoy ฉันพยายามsprintf("%.100f",pi)และให้มัน [1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000" ซึ่งมีทศนิยม 48 ตำแหน่ง นี่คือขีด จำกัด สูงสุดที่ R สามารถจัดการได้หรือไม่?

11
ควรเพิ่มการลอยตัวในลำดับใดเพื่อให้ได้ผลลัพธ์ที่แม่นยำที่สุด
นี่เป็นคำถามที่ฉันถูกถามในการสัมภาษณ์ล่าสุดของฉันและฉันอยากรู้(ฉันจำทฤษฎีการวิเคราะห์ตัวเลขไม่ได้จริง ๆ โปรดช่วยฉันด้วย :) หากเรามีฟังก์ชันบางอย่างซึ่งสะสมตัวเลขทศนิยม: std::accumulate(v.begin(), v.end(), 0.0); vเป็นstd::vector<float>ตัวอย่างเช่น จะดีกว่าไหมหากเรียงลำดับตัวเลขเหล่านี้ก่อนสะสม คำสั่งใดที่จะให้คำตอบที่แม่นยำที่สุด ฉันสงสัยว่าการเรียงลำดับตัวเลขจากน้อยไปมากจะทำให้ข้อผิดพลาดของตัวเลขน้อยลงแต่น่าเสียดายที่ฉันไม่สามารถพิสูจน์ได้ด้วยตัวเอง ป.ล. ฉันตระหนักดีว่าสิ่งนี้อาจไม่เกี่ยวข้องกับการเขียนโปรแกรมในโลกแห่งความเป็นจริงเพียงแค่อยากรู้อยากเห็น

9
การตรวจสอบค่าทศนิยมเพื่อความเท่าเทียมกันเป็น 0 ปลอดภัยหรือไม่
ฉันรู้ว่าคุณไม่สามารถพึ่งพาความเท่าเทียมกันระหว่างค่าประเภทสองหรือทศนิยมได้ตามปกติ แต่ฉันสงสัยว่า 0 เป็นกรณีพิเศษหรือไม่ ในขณะที่ฉันสามารถเข้าใจความไม่ตรงระหว่าง 0.00000000000001 ถึง 0.00000000000002 แต่ 0 นั้นดูเหมือนจะค่อนข้างยากที่จะสับสนเนื่องจากไม่มีอะไรเลย หากคุณไม่เข้าใจอะไรเลยมันก็ไม่ใช่อะไรอีกแล้ว แต่ฉันไม่รู้เกี่ยวกับหัวข้อนี้มากนักจึงไม่เหมาะที่จะพูด double x = 0.0; return (x == 0.0) ? true : false; จะกลับมาจริงหรือไม่?

7
C # DateTime ตอนนี้แม่นยำ
ฉันเพิ่งพบพฤติกรรมที่ไม่คาดคิดบางอย่างกับ DateTime.UtcNow ขณะทำการทดสอบหน่วย ดูเหมือนว่าเมื่อคุณเรียก DateTime.Now/UtcNow อย่างต่อเนื่องดูเหมือนว่าจะให้ค่าเดิมกลับมาเป็นช่วงเวลาที่นานกว่าที่คาดไว้แทนที่จะจับภาพทีละมิลลิวินาทีที่แม่นยำยิ่งขึ้น ฉันรู้ว่ามีคลาสนาฬิกาจับเวลาที่เหมาะกว่าสำหรับการวัดเวลาที่แม่นยำ แต่ฉันอยากรู้ว่ามีใครสามารถอธิบายพฤติกรรมนี้ใน DateTime ได้หรือไม่? มีเอกสารความแม่นยำอย่างเป็นทางการสำหรับ DateTime หรือไม่ตอนนี้ (ตัวอย่างเช่นแม่นยำภายใน 50 ms?) เหตุใด DateTime.Now จึงมีความแม่นยำน้อยกว่าที่นาฬิกา CPU ส่วนใหญ่สามารถจัดการได้ อาจจะออกแบบมาสำหรับ CPU ตัวหารร่วมที่ต่ำที่สุด? public static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i=0; i<1000; i++) { var now = DateTime.Now; Console.WriteLine(string.Format( "Ticks: {0}\tMilliseconds: {1}", …

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พิเศษ

11
PHP7.1 json_encode () ปัญหาการลอย
นี่ไม่ใช่คำถามเนื่องจากเป็นเรื่องที่ควรระวังมากกว่า ฉันอัปเดตแอปพลิเคชันที่ใช้json_encode()เป็น PHP7.1.1 และพบปัญหาเกี่ยวกับการลอยตัวถูกเปลี่ยนเป็นบางครั้งขยายออกไป 17 หลัก ตามเอกสารประกอบ PHP 7.1.x เริ่มใช้serialize_precisionแทนความแม่นยำเมื่อเข้ารหัสค่าสองค่า ฉันเดาว่านี่ทำให้เกิดค่าตัวอย่างของ 472.185 ที่จะกลายเป็น 472.18500000000006 json_encode()หลังจากค่าที่เดินผ่าน ตั้งแต่การค้นพบของฉันฉันได้เปลี่ยนกลับไปเป็น PHP 7.0.16 และฉันไม่มีปัญหากับjson_encode()ไฟล์. ฉันยังพยายามอัปเดตเป็น PHP 7.1.2 ก่อนที่จะเปลี่ยนกลับเป็น PHP 7.0.16 เหตุผลที่อยู่เบื้องหลังคำถามนี้เกิดจากPHP - Floating Number Precisionอย่างไรก็ตามสาเหตุทั้งหมดนี้เป็นเพราะการเปลี่ยนแปลงจากความแม่นยำเป็นการใช้งาน serialize_precision ในjson_encode(). หากใครทราบวิธีแก้ปัญหานี้เรายินดีเป็นอย่างยิ่งที่จะรับฟังเหตุผล / แก้ไข ตัดตอนมาจากอาร์เรย์หลายมิติ (ก่อนหน้า): [staticYaxisInfo] => Array ( [17] => stdClass Object ( [variable_id] => 17 [static] …
93 php  json  precision  php-7.1 

2
เหตุใด 199.96 - 0 = 200 ใน SQL
ฉันมีลูกค้าบางคนได้รับตั๋วเงินแปลก ๆ ฉันสามารถแยกปัญหาหลัก: SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 200 what the? SELECT 199.96 - (0.0 * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96 SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * 199.96)) -- 199.96 SELECT 199.96 - …

2
วิธีที่ถูกต้อง / มาตรฐานในการตรวจสอบว่าความแตกต่างเล็กกว่าความแม่นยำของเครื่อง?
ฉันมักจะลงเอยในสถานการณ์ที่จำเป็นต้องตรวจสอบว่าความแตกต่างที่ได้รับนั้นสูงกว่าความแม่นยำของเครื่องหรือไม่ ดูเหมือนว่าเพื่อวัตถุประสงค์นี้ R .Machine$double.epsมีตัวแปรที่มีประโยชน์: อย่างไรก็ตามเมื่อฉันหันไปใช้ซอร์สโค้ด R เพื่อหาแนวทางเกี่ยวกับการใช้ค่านี้ฉันจะเห็นรูปแบบที่แตกต่างกันหลายแบบ ตัวอย่าง นี่คือตัวอย่างจากstatsห้องสมุด: t.test.R if(stderr < 10 *.Machine$double.eps * abs(mx)) chisq.test.R if(abs(sum(p)-1) > sqrt(.Machine$double.eps)) integrate.R rel.tol < max(50*.Machine$double.eps, 0.5e-28) lm.influence.R e[abs(e) < 100 * .Machine$double.eps * median(abs(e))] <- 0 princomp.R if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L])) เป็นต้น คำถาม วิธีการหนึ่งที่สามารถเข้าใจเหตุผลที่อยู่เบื้องหลังเหล่านั้นแตกต่างกันทั้งหมด10 *, 100 …

1
ทำไม np.dot ไม่แม่นยำ? (อาร์เรย์ n-dim)
สมมติว่าเราใช้np.dotสอง'float32'อาร์เรย์สองมิติ: res = np.dot(a, b) # see CASE 1 print(list(res[0])) # list shows more digits [-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287] เบอร์ ยกเว้นพวกเขาสามารถเปลี่ยน: กรณีที่ 1 : ฝานa np.random.seed(1) a = np.random.randn(9, 6).astype('float32') b = np.random.randn(6, 6).astype('float32') for i in range(1, len(a)): print(list(np.dot(a[:i], b)[0])) # full shape: (i, 6) [-0.9044868, -1.1708502, …
15 python  c  arrays  numpy  precision 

5
ผลรวมที่มีเสถียรภาพของตัวเลขที่สั่งซื้อ
ฉันมีจำนวนบวกของตัวเลขบวกจำนวนจุดลอยตัว ( std::vector<float>ขนาด ~ 1,000) ตัวเลขจะเรียงตามลำดับที่ลดลง ถ้าฉันรวมพวกเขาตามคำสั่ง: for (auto v : vec) { sum += v; } ฉันเดาว่าฉันอาจมีปัญหาเสถียรภาพเชิงตัวเลขเนื่องจากใกล้ถึงจุดสิ้นสุดของเวกเตอร์sumจะยิ่งใหญ่กว่าvมาก วิธีแก้ปัญหาที่ง่ายที่สุดคือสำรวจเวกเตอร์ในลำดับย้อนกลับ คำถามของฉันคือ: มีประสิทธิภาพเช่นเดียวกับกรณีไปข้างหน้า? ฉันจะมีแคชหายไปอีกหรือไม่ มีโซลูชันอัจฉริยะอื่น ๆ อีกหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.