ใน Excel เมื่อฉันป้อน 22222.09482 ฉันจะเห็นหมายเลข 22222.0948199999 ในแถบสูตร


28

คุณช่วยได้ไหม - เพราะฉันมีสถานการณ์แปลก ๆ ที่เมื่อฉันป้อนหมายเลข 22222.09482 ในเซลล์จากนั้นฉันเห็นหมายเลข 22222.0948199999 ที่แตกต่างกันในแถบสูตร ด้านล่างนี้เป็นภาพรวมของปัญหา

ข้อผิดพลาดตัวอย่าง

ฉันเห็นพฤติกรรมเดียวกันเมื่อฉันป้อนหมายเลขต่อไปนี้:

22222.09482
33333.09482
44444.09482
55555.09482

แต่เมื่อฉันป้อน 11111.09482 และ 66666.09482, 77777.09482 .. จนถึง 99999.09482 พวกเขาจะแสดงอย่างถูกต้อง ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับการปัดเศษหรือไม่ ฉันไม่ได้ตั้งค่าโปรไฟล์การปัดเศษ ได้โปรดช่วยฉันในการแก้ไขปัญหา


1
พบอย่างเรียบร้อยเหมือนกันสำหรับฉัน - คุณสามารถใช้ROUND()ไหม =ROUND(A1,5)แล้วคัดลอก / วางข้อมูลเป็นค่าและลบหมายเลขเดิมหรือไม่
BruceWayne

1
@BruceWayne น่าสนใจที่ROUND()จะแสดงตัวเลขที่ถูกต้อง แต่การคัดลอก / วางเป็นค่าที่นำมันกลับไปที่ปัญหาเดิม!
Rey Juna

1
@ReyJuna - จากนั้นทำROUND(A1,5)อีกครั้งกับค่าที่วาง จากนั้นคัดลอก / วางค่าเหล่านั้นและRound()อีกครั้งจากนั้นคัดลอก / วาง ... : P ... น่าสนใจและดูเหมือนว่า @EugenRieck มีเหตุผล เป็นคำถามที่ดี!
BruceWayne

1
คุณสนใจความแตกต่างระหว่าง 22222.09482 และ 22222.0948199999 หรือไม่? มันแตกต่างจาก 5 ส่วนใน 100 ล้านล้าน
Russell Borogove

4
คณิตศาสตร์เลขทศนิยมถูกหักหรือไม่ . แต่ที่น่าจะเป็นข้อผิดพลาดเนื่องจากdoubleมีความแม่นยำพอที่จะแสดงให้เห็นว่าเมื่อกลมค่าที่ถูกต้องเป็นคนส่วนใหญ่คาดว่า
phuclv

คำตอบ:


31

มันเป็นข้อผิดพลาด

Excel ใช้การแทนค่าความแม่นยำสองเท่าแบบปกติของ IEEE ตามคำตอบอื่น ๆ ความแม่นยำของมันคือ 53 เลขฐานสองที่สำคัญซึ่งสอดคล้องกับหลักทศนิยม 16 หลัก

มันปลอดภัยเสมอที่จะแสดงทศนิยม15หลักแรก ในแง่ที่ว่าตัวเลข "นำเสนอ" ใด ๆ ที่มีทศนิยม 15 หลักสามารถแยกความแตกต่างได้อย่างปลอดภัยจากตัวเลขที่ได้รับโดยการเปลี่ยนตัวเลขทศนิยม 15 โดยหนึ่ง ตัวอย่างเช่นหมายเลข 15 หลัก:

22222.09481 99999
22222.09482 00000
22222.09482 00001

แผนที่สามที่แตกต่างกันตัวเลขความแม่นยำสอง ไม่มีทั้งสามคนนี้จะเป็น "เพื่อนบ้าน" ในการเป็นตัวแทนความแม่นยำสองเท่าในกรณีนี้โดยเฉพาะ

ดังนั้นการทำให้ผู้ใช้สับสนสองคนแรกในหน้าจอแสดงผลของผู้ใช้เป็นข้อผิดพลาดของ Excel

อันที่จริงในโดเมนนี้ (ระหว่าง 16384 ถึง 32768) ความแม่นยำสัมบูรณ์คือ 2 -38และตัวเลขต่อไปนี้สามารถแทนได้:

...
22222.09481 99998 96571 9714760780334472656250000
22222.09481 99999 00209 9502831697463989257812500 <-- the one closest to what Excel showed to the user
22222.09481 99999 03847 9290902614593505859375000
22222.09481 99999 07485 9078973531723022460937500
22222.09481 99999 11123 8867044448852539062500000
22222.09481 99999 14761 8655115365982055664062500
22222.09481 99999 18399 8443186283111572265625000
22222.09481 99999 22037 8231257200241088867187500
22222.09481 99999 25675 8019328117370605468750000
22222.09481 99999 29313 7807399034500122070312500
22222.09481 99999 32951 7595469951629638671875000
22222.09481 99999 36589 7383540868759155273437500
22222.09481 99999 40227 7171611785888671875000000
22222.09481 99999 43865 6959682703018188476562500
22222.09481 99999 47503 6747753620147705078125000
22222.09481 99999 51141 6535824537277221679687500
22222.09481 99999 54779 6323895454406738281250000
22222.09481 99999 58417 6111966371536254882812500
22222.09481 99999 62055 5900037288665771484375000
22222.09481 99999 65693 5688108205795288085937500
22222.09481 99999 69331 5476179122924804687500000
22222.09481 99999 72969 5264250040054321289062500
22222.09481 99999 76607 5052320957183837890625000
22222.09481 99999 80245 4840391874313354492187500
22222.09481 99999 83883 4628462791442871093750000
22222.09481 99999 87521 4416533708572387695312500
22222.09481 99999 91159 4204604625701904296875000
22222.09481 99999 94797 3992675542831420898437500
22222.09481 99999 98435 3780746459960937500000000 <-- the one closest to what the user types
22222.09482 00000 02073 3568817377090454101562500
22222.09482 00000 05711 3356888294219970703125000
22222.09482 00000 09349 3144959211349487304687500
22222.09482 00000 12987 2933030128479003906250000
22222.09482 00000 16625 2721101045608520507812500
22222.09482 00000 20263 2509171962738037109375000
22222.09482 00000 23901 2297242879867553710937500
22222.09482 00000 27539 2085313796997070312500000
22222.09482 00000 31177 1873384714126586914062500
22222.09482 00000 34815 1661455631256103515625000
22222.09482 00000 38453 1449526548385620117187500
22222.09482 00000 42091 1237597465515136718750000
22222.09482 00000 45729 1025668382644653320312500
22222.09482 00000 49367 0813739299774169921875000
22222.09482 00000 53005 0601810216903686523437500
22222.09482 00000 56643 0389881134033203125000000
22222.09482 00000 60281 0177952051162719726562500
22222.09482 00000 63918 9966022968292236328125000
22222.09482 00000 67556 9754093885421752929687500
22222.09482 00000 71194 9542164802551269531250000
22222.09482 00000 74832 9330235719680786132812500
22222.09482 00000 78470 9118306636810302734375000
22222.09482 00000 82108 8906377553939819335937500
22222.09482 00000 85746 8694448471069335937500000
22222.09482 00000 89384 8482519388198852539062500
22222.09482 00000 93022 8270590305328369140625000
22222.09482 00000 96660 8058661222457885742187500
22222.09482 00001 00298 7846732139587402343750000
...

หากต้องการทำอย่างละเอียดยิ่งขึ้นให้ลองพิมพ์22222.09482ในเซลล์หนึ่งและพิมพ์22222.0948199999(เก้าสิบห้าส่วนต่อท้าย) ในอีกเซลล์หนึ่ง Excel ควรเลือกตัวแทน IEEE สองตัวที่ระบุโดยลูกศรด้านบน 9.82254E-11และผมคิดว่ามันไม่เพราะคุณสามารถคำนวณความแตกต่างของทั้งสองเซลล์ที่จะได้รับ แต่ทั้งคู่ก็แสดงในลักษณะเดียวกัน

ถ้า Excel แสดงตัวเลข 17 ตัวแรกนั่นจะเป็นประโยชน์ในการเลือกตัวเลข IEEE ที่เป็น "ใต้" เป็นเลขทศนิยม ในกรณีนั้น:

22222.0948199999 --> 22222.09481 99999 00
22222.09482      --> 22222.09481 99999 98

แต่การแสดงตัวเลข15หลักในแบบที่ไม่ถูกต้องนั้นทำให้เข้าใจผิดและไม่ช่วยเหลือ


ก่อนใครอ้างว่าเป็นเจตนาแล้วทำไม8.7ไม่แสดงพฤติกรรมเดียวกัน ตัวเลขที่มีความแม่นยำสองเท่าที่ใกล้ที่สุดถึง8.7คือ:

8.69999999999999 93

ดังนั้นจึงควรแสดงราวกับ8.69999999999999ว่าเป็นเจตนา แต่มันไม่ได้


9
คุณพูดถูกมันเป็นข้อผิดพลาด อัลกอริธึมสำหรับการแปลงเลขทศนิยมแบบเลขฐานสองที่แสดงจำนวนนัยสำคัญน้อยที่สุดนั้นเป็นเรื่องยาก แต่เป็นที่รู้จักกันดี ดูเหมือนว่าบางคนพลาดรายละเอียดที่สำคัญ
Mark Ransom

2
@ Ruslan ฉันได้เห็นหัวข้อมากมายเกี่ยวกับเลขทศนิยมใน Stack Overflow และไซต์ SE อื่น ๆ และบ่อยครั้งที่ผู้คนให้คำตอบกับความจริงทั่วไปและแนวคิดเกี่ยวกับ (ทศนิยม) ทุกจุดลอยตัวโดยไม่เกี่ยวข้องกับตัวเลขจริง และตรวจสอบว่าพฤติกรรมนั้นสอดคล้องกับมาตรฐาน IEEE หรือไม่ ฉันคิดว่าฉันสามารถโพสต์คำถาม"ทำไมจะ2.1 + 2.2กลับมา4.80000001?" และได้รับคำตอบมากมายว่านั่นคือสิ่งที่ฉันต้องคาดหวังเมื่อใช้จุดลอยตัว
Jeppe Stig Nielsen

1
@benshepherd: ภาพหน้าจอ LibreOffice ไม่แสดงภาพหน้าจอ Excel ที่แสดงให้เห็น
Thomas Weller

1
@JeppeStigNielsen: 2.1 + 2.2 = 4.8? นั่นเป็นเพียง 0.5 ปิด เป็นเรื่องปกติ
โทมัสเวลเลอร์

@ MarkRansom: ดังนั้น Excel ใช้ตัวเองจริง ๆ หรือไม่ Excel ไม่ถูกนำมาใช้ใน C ++ หรืออะไรที่คำนวณจุดลอยตัวนั้น? นั่นคือสิ่งที่คุณพูด หรือเป็นจุดบกพร่องใน C ++ แล้วมันมีผลต่อการใช้งานนับล้าน?
โทมัสเวลเลอร์

22

Excel เก็บตัวเลขในรูปแบบทศนิยม 64 บิตไบนารีของIEEE 754 กุญแจสำคัญคือ "ร้านค้า" - การเปลี่ยนจากทศนิยมเป็นไบนารีจะเกิดขึ้นทุกครั้งที่มีการจัดเก็บตัวเลขไม่ใช่เฉพาะเมื่อมีการใช้ในการคำนวณจริง

บทความที่ดีเกี่ยวกับเรื่องนี้อยู่ที่การทำความเข้าใจความแม่นยำของจุดลอยตัวหรือที่รู้จักว่า“ ทำไม Excel ให้คำตอบที่ผิดพลาดแก่ฉัน”

เป็นไปได้ที่จะสร้างโปรแกรมสเปรดชีตที่สามารถจัดการตัวเลขขนาดใหญ่ที่มีตัวเลขจำนวนมาก แต่มันไม่ได้เป็นประโยชน์อย่างมาก Excel อาจได้รับการออกแบบให้ใช้รูปแบบ IEEE 754 decimal128ซึ่งอนุญาตให้มีทศนิยม 34 หลัก - เพียงพอที่จะเก็บ 22222.09482 แต่มันกลับใช้รูปแบบไบนารีพรีซิชั่นของ Double64 ที่มีความแม่นยำมากขึ้นซึ่งมีความแม่นยำ 53 บิตซึ่งต่ำกว่า 16 หลัก ในขณะที่คุณอาจคิดว่าจะเพียงพอสำหรับตัวเลขที่มีเพียง 10 หลักเท่านั้นการแปลงจากทศนิยมเป็นไบนารีทำให้สิ่งต่าง ๆ มีความซับซ้อนเล็กน้อยเช่น 2222209482 สามารถจัดเก็บได้อย่างถูกต้อง 100% เป็นเลขฐานสอง 64 แต่ 22222.09482 ไม่สามารถทำได้

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

สำหรับผู้ที่ชี้ให้เห็นว่า LibreOffice จัดการสิ่งนี้ได้ดีกว่าหน้าตาอาจหลอกลวงได้ ดูโพสต์นี้สำหรับรายละเอียดเพิ่มเติม ดูเหมือนว่า LibreOffice จะจัดการกับจำนวนมากแตกต่างกันเล็กน้อย แต่มีการแสดงจุดลอยตัว 64 บิตพื้นฐานเดียวกันกับปัญหาที่คล้ายกัน


3
คำตอบนี้จะดีกว่าถ้ามันยังอธิบายการสังเกตว่าตัวเลขบางตัวที่มีทศนิยมแสดงอย่างถูกต้องเหมือนกับที่ป้อน - เช่น 11111.09482 ในตัวอย่างของ OP
แอนดรู

11
เพียงเพื่อความสนุกสนาน: 22222.09482ถูกเก็บไว้เป็น1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)ใน IEEE 754 หรือในคำอื่น ๆ เช่นว่าซึ่งเป็น1.35632902954101553 * 2^14 22222.0948199999984353787904
YoYoYonnY

1
Binary64 (หรือความแม่นยำสองเท่า) เป็นมากกว่าเพียงพอสำหรับตัวเลขที่มีทศนิยมสิบหลัก แน่นอนว่ามันไม่สามารถแสดงได้อย่างแน่นอน แต่ตัวเลขส่วนใหญ่รวมถึง0.2และ0.1ไม่สามารถแสดงได้อย่างแน่นอน (เศษส่วน 1/5 (หนึ่งในห้า) มีการขยายไบนารีซ้ำไม่สิ้นสุด) อย่างไรก็ตาม Excel แสดงสิ่งต่าง ๆ ในทางที่สับสน
Jeppe Stig Nielsen

2
"โปรดทราบว่าโดยทั่วไปสเปรดชีตจะใช้สำหรับข้อมูลทางการเงินซึ่งโดยทั่วไปไม่ต้องการตัวเลขที่แม่นยำมาก" - นี่เป็นเรื่องที่ผิดมาก - ข้อมูลทางการเงินต้องการพฤติกรรมที่แม่นยำในแง่ "สิ่งที่คุณพิมพ์คือสิ่งที่คุณคาดหวังว่าจะยังคงอยู่ "คุณพูดถูกต้องกับการแปลงทศนิยม / ไบนารี่ ฯลฯ แต่ข้อโต้แย้งนี้ไม่ถูกต้อง! สำหรับข้อมูลทางการเงินเรามักจะใช้รูปแบบMoneyหรือBigIntegerรูปแบบซึ่งมักจะใช้รูปแบบการจัดเก็บทศนิยม
Honza Zidek

4
คำตอบนี้ไม่เพียงพอที่จะอธิบายสิ่งที่เกิดขึ้น เราสังเกตข้อผิดพลาดใน Excel ซึ่งมีจำนวนมีรูปแบบผิด 22222.09482 และ 22222.0948199999 เป็นตัวเลขไบนารี 64 ที่แตกต่างกัน
Ruslan

11

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

เพียงเพื่อให้ชัดเจน: ทำความเข้าใจว่าข้อความที่คุณป้อนหมายถึงตัวเลขและแปลงลำดับตัวเลขให้เป็นตัวเลขที่ตอบสนองความหมายของ "การคำนวณ" จากด้านบนแล้ว

แก้ไข

ฉันยังไม่ได้ทำให้ชัดเจนพอที่ฉันพิจารณาทางเลือกของการใช้การแสดงทศนิยม 64 บิตจริง ๆ แล้วดี: Excel ไม่เป็นเครื่องมือสำหรับนักวิทยาศาสตร์ที่มีข้อผิดพลาดในการปัดเศษในหลักที่ 11 หลังจากจุดทศนิยม ผลกระทบที่ยิ่งใหญ่ แต่นักบัญชีไม่ต้องการลดความเร็วในการประมวลผลลงหลายล้านเท่าเพื่อกำหนดแหล่งที่มาของการคำนวณที่ไม่แน่นอนซึ่งอาจแสดงให้เห็นถึงตัวเลขที่พวกเขาไม่เคยใช้

หากคุณใช้โปรแกรมสเปรดชีตสำหรับสิ่งที่ได้รับการออกแบบมาและใช้การจัดรูปแบบผลลัพธ์ที่ชัดเจนเพื่อให้แน่ใจว่าเอฟเฟกต์เหล่านั้นจะไม่ทำให้มันกลายเป็นอาณาจักรที่มองเห็นได้คุณจะไม่เป็นไร


1
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
DavidPostill

1
คำตอบนี้ไม่เพียงพอที่จะอธิบายสิ่งที่เกิดขึ้น เรากำลังสังเกตข้อผิดพลาดใน Excel ซึ่งมีการจัดรูปแบบตัวเลขอย่างไม่ถูกต้อง 22222.09482 และ 22222.0948199999 เป็นตัวเลขไบนารี 64 ที่แตกต่างกัน
Ruslan

2

เมื่อฉันป้อน 11111.09482 และ 66666.09482, 77777.09482 .. จนกระทั่ง 99999.09482 แสดงว่าถูกต้องแล้ว ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับการปัดเศษหรือไม่ ฉันไม่ได้ตั้งค่าโปรไฟล์การปัดเศษ ได้โปรดช่วยฉันในการแก้ไขปัญหา

ตัวเลขบางตัวสามารถแสดงได้อย่างถูกต้องและบางส่วนไม่สามารถ

ตั้งค่าความแม่นยำที่แสดงอย่างเหมาะสมสำหรับการคำนวณของคุณและใช้ฟังก์ชันround ()

  • คำอธิบาย:

  • วิธีการแก้:

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

    1. คลิกไฟล์> ตัวเลือก
      ใน Excel 2007: คลิกปุ่ม Microsoft Office รูปปุ่มจากนั้นคลิกตัวเลือกของ Excel
      รูปปุ่ม

    2. คลิกขั้นสูงจากนั้นภายใต้เมื่อคำนวณสมุดงานนี้ให้เลือกกล่องกาเครื่องหมายตั้งค่าความแม่นยำตามที่แสดงแล้วคลิกตกลง

    3. คลิกตกลง

    4. ในแผ่นงานให้เลือกเซลล์ที่คุณต้องการจัดรูปแบบ

    5. บนแท็บหน้าแรกคลิกตัวเรียกใช้กล่องโต้ตอบรูปปุ่มติดกับหมายเลข
      รูปปุ่มตัวเรียกใช้
      รูป Ribbon ของ Excel

    6. ในกล่องหมวดหมู่คลิกหมายเลข

    7. ในกล่องตำแหน่งทศนิยมให้ป้อนจำนวนตำแหน่งทศนิยมที่คุณต้องการแสดง

    เคล็ดลับ: เพื่อลดผลกระทบใด ๆ ของความไม่ถูกต้องของการจัดเก็บเลขทศนิยมคุณสามารถใช้ฟังก์ชัน ROUND เพื่อปัดเศษตัวเลขเป็นจำนวนทศนิยมที่ต้องการโดยการคำนวณของคุณ

  • วารสารการบัญชี - " ข้อผิดพลาดในการคำนวณของ Excel ":

    ตัวเลขคี่บางอย่างสร้างทศนิยมทศนิยมซ้ำและเมื่อตัวเลขซ้ำเหล่านั้นถูกตัดหลังจาก 15 สถานที่เลขฐานสองจะไม่แปลงกลับอย่างแม่นยำเป็นค่าตัวเลขที่ต้องการ ตัวอย่างเช่นใน Excel ทุกรุ่นสูตร 22.26 - 21.29 ควรให้ 0.97 แต่ให้ผลตอบแทน 0.970000000000002 ลองใช้และอย่าลืมเพิ่มความกว้างคอลัมน์และตำแหน่งทศนิยมของคุณเพื่อให้คุณเห็นปัญหาการคำนวณ

    ข้อผิดพลาดดังกล่าวมักจะถือว่าไม่มีนัยสำคัญหรือไม่มีสาระสำคัญเพราะพวกเขาไม่ค่อยแสดงความผิดพลาดในการคำนวณที่มีความหมาย อย่างไรก็ตามนี่คือสองมาตรการที่คุณสามารถทำได้เพื่อกำจัดข้อผิดพลาดทศนิยมที่อาจเกิดขึ้น:

    1. ฟังก์ชัน ROUND ใช้ฟังก์ชัน ROUND ของ Excel เพื่อปัดเศษค่าที่คำนวณของคุณไปเป็นตำแหน่งทศนิยมที่ต้องการซึ่งจะช่วยลดความผิดปกติใด ๆ ที่เป็นตัวเลข 15 หลัก ตัวอย่างเช่นสูตร = ROUND (-21.29 + 22.26,2) ให้ผลตอบแทนที่แม่นยำ 0.97

    2. ความแม่นยำ คุณสามารถเปิดใช้ตัวเลือกความแม่นยำของ Excel ในการแสดงเพื่อบังคับให้สูตรทั้งหมดตัดและปัดเศษค่าที่คำนวณได้ตามตัวเลขที่มองเห็นได้

    ในการเปิดใช้ตัวเลือกนี้ใน Excel 2013, 2010 และ 2007 ให้เลือกไฟล์ (หรือ Office Orb), ตัวเลือก (หรือตัวเลือกของ Excel), ขั้นสูงและในส่วนเมื่อคำนวณสมุดงานนี้ให้ทำเครื่องหมายในช่องตั้งค่าความแม่นยำตามที่ปรากฏ จากนั้นคลิกตกลง

    ใน Excel 2003, 2002 และ 2000 จากเมนูเครื่องมือให้เลือกตัวเลือกและในแท็บการคำนวณภายใต้ตัวเลือกสมุดงานให้เลือกช่องทำเครื่องหมายแม่นยำตามที่ปรากฏแล้วคลิกตกลง


1
คำอธิบายไม่เกี่ยวข้อง: ความแตกต่างระหว่างจำนวนที่คาดหวังและจำนวนที่ได้รับคือ 28 ULP - วิธีมากเกินไปสำหรับข้อผิดพลาด roundoff ธรรมชาติ "การแก้ปัญหา" เพียงซ่อนข้อบกพร่องจริง
Ruslan

มันจะดีมากถ้าคุณสามารถโพสต์ข้อความนั้นพร้อมกับลิงค์เชื่อมโยงสองสามข้อที่สนับสนุนคำตอบของคุณเป็นคำตอบของคุณเองแทนที่จะแสดงความคิดเห็น ด้วยวิธีการที่จะได้รับความสนใจจากผู้ใช้ 954171 และผู้คนสามารถลงคะแนนได้ คุณสามารถให้ลิงค์ไปยังรายงานข้อผิดพลาดได้หรือไม่?
Rob

มีคำตอบสำหรับรายละเอียดทางคณิตศาสตร์ที่เกี่ยวข้องทั้งหมดแล้ว Dunno จากรายงานข้อผิดพลาดใด ๆ เกี่ยวกับเรื่องนี้แม้ว่า
Ruslan

0

อย่างที่ฉันแน่ใจว่าคุณรู้ว่าคอมพิวเตอร์ใช้งานภายในโดยใช้ศูนย์และคน (บิต aka) และมีจำนวนบิตคงที่เพื่อเป็นตัวแทนของค่า (ปกติ 64 บิตในปัจจุบัน) นั่นหมายความว่าจำนวนของค่าต่าง ๆ ที่สามารถแทนค่าได้คือ 2 ถึงกำลังงานที่ 64 นั่นเป็นจำนวนมากแน่นอน แต่จำนวนค่าที่เป็นไปได้นั้นมี จำกัด ดังนั้นจึงไม่สามารถแสดงตัวเลขทั้งหมดได้ เมื่อพบตัวเลขที่ไม่สามารถแสดงได้อย่างถูกต้องมันจะถูกแทนที่โดยอัตโนมัติด้วยหมายเลขที่ใกล้เคียงที่สุดที่สามารถเป็นตัวแทนได้ นั่นคือสิ่งที่คุณเห็น


คุณกำลังระบุว่าเป็นเพราะการแปลงฐานตัวเลขหรือเนื่องจากจำนวนหน่วยความจำที่ จำกัด ต่อค่าหรือไม่ ในทั้งสองกรณีการใช้เหตุผลของคุณผิด ในทางเทคนิคแล้วมันเป็นไปได้อย่างสมบูรณ์แบบที่จะมีความแม่นยำตามอำเภอใจและจำนวนความยาวโดยพลการ เพื่อยกตัวอย่างมี GNU bignum นอกจากนี้ไม่จำเป็นต้องเข้ารหัสตัวเลขในรูปแบบสูญเสีย ดังนั้นทั้งวิทยาการคอมพิวเตอร์จึงไม่มีข้อผิดพลาดและไม่มีเลขฐานสอง เป็นเพียงนักพัฒนา Excel ที่เลือกการเข้ารหัสตัวเลขที่สูญเสียการป้อนข้อมูลผู้ใช้ wrt
phresnel

-1

คอมพิวเตอร์ทำคณิตศาสตร์เป็นเลขฐานสองและเกือบจะใช้เลขทศนิยมสำหรับค่าที่ไม่ใช่จำนวนเต็ม ค่าเศษส่วนเพียงอันเดียวที่สามารถแทนค่าได้อย่างแม่นยำในจุดลอยตัวนั้นจะต้องเป็นผลรวมของกำลังเศษส่วนบางส่วนของ 2 (1/2, 1/4, 1/8, 1/16, 1/32, ... ) ที่ขีด จำกัด ความแม่นยำที่ออกแบบมา (ปกติคือ 53 บิต) ค่าเหล่านี้ไม่ได้มีการแสดงที่เป็นระเบียบเรียบร้อยหรือเป็นทศนิยมเสมอไปและในทางกลับกันค่าเศษส่วนทั้งหมดที่คุณสามารถใช้แทนทศนิยมนั้นจะมีการแทนค่าที่แน่นอนในไบนารี ตัวอย่างเช่น: 0.1 มันไม่สามารถแสดงได้ว่าเป็นผลรวมของพลังเศษส่วนของ 2 ที่ไม่เกิดขึ้นตลอดไป

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

ทำไม 53 บิต (ให้หรือรับ) เนื่องจากมาตรฐานทั่วไปสำหรับการจัดเก็บจุดลอยตัว "ความแม่นยำสองเท่า" ใช้ 64 บิตซึ่งมี mantissa (เรียกอีกอย่างว่าซิกนิแคนด์) ตัวบ่งชี้สัญญาณและเลขชี้กำลัง เลขชี้กำลังมักจะถูกจัดสรร 10 บิตเครื่องหมายใช้เวลาหนึ่งปล่อยให้ 53 สำหรับ mantissa นี่สำหรับการจัดเก็บ การคำนวณมักจะทำโดยใช้ 80 บิตและปัดเศษกลับ

มีหลายสถานการณ์ที่คอมพิวเตอร์จะทำงานในฐาน 10 โดยเฉพาะเมื่อทำงานกับค่าเงินที่ไม่สามารถยอมรับการปัดเศษสิ่งประดิษฐ์ได้


2
ฉันไม่เห็นด้วยกับผ้าห่มคำสั่งคอมพิวเตอร์ทั้งหมด มีคอมพิวเตอร์หลายเครื่องซึ่งส่วนใหญ่ไม่ได้ใช้งานยกเว้นในส่วนของพิพิธภัณฑ์ที่ใช้รูปแบบตัวเลขทศนิยมสำหรับการจัดเก็บและคำนวณ นอกจากนี้ยังมี BCD - Binary Coded Decimal - ใช้ในซีพียูจำนวนมากขึ้นรวมถึงการใช้งานที่ จำกัด ในซีพียู Intel ไม่มีสิ่งใดที่เกี่ยวข้องกับคำถามในมือ - วิธีการที่ Microsoft Excel ใช้เพื่อเก็บหมายเลขซึ่งเป็นเลขฐานสองทั้งหมด แต่ "คอมพิวเตอร์ทุกเครื่อง" ไม่ถูกต้อง
manassehkatz-Reinstate Monica

ฉันเห็นการเปลี่ยนแปลงจาก "คอมพิวเตอร์ทุกเครื่อง" เป็น "คอมพิวเตอร์" - ฉันจะไปกับ "คอมพิวเตอร์เกือบทั้งหมด" หรือ "คอมพิวเตอร์ที่ทันสมัยที่สุด" หรืออะไรทำนองนั้น ฉันรู้ - ฉันพิถีพิถัน แต่คอมพิวเตอร์ก็เช่นกัน :-)
manassehkatz-Reinstate Monica

@manassehkatz คอมพิวเตอร์ดิจิตอลทุกเครื่องเป็นระบบฐานสอง BCD เป็นเพียงฐาน 10 โครงสร้างที่ด้านบนของไบนารีเพื่ออำนวยความสะดวกในการคำนวณทศนิยม
Zenilogix

ในขณะที่คอมพิวเตอร์ดิจิทัลทั้งหมดเป็นแบบไบนารีพื้นฐานจริงๆแล้วมีบางส่วนในช่วงแรก ๆ ที่ใช้ทศนิยม แต่ฉันยอมรับว่า BCD นั้นเป็นโครงสร้างพื้นฐาน 10 ที่ด้านบนของไบนารี่เพื่อช่วยในการคำนวณเลขทศนิยม
manassehkatz-Reinstate Monica

คำตอบนี้ฟังดูเหมือนเป็นความผิดของคอมพิวเตอร์ แต่มันไม่ใช่ คุณสามารถแสดงตัวเลขใด ๆ ที่คุณสามารถเขียนลงบนกระดาษได้อย่างแม่นยำ (แทน 1/3 ได้อย่างง่ายดายเมื่อเก็บเป็นเศษส่วนเช่น) มันเกี่ยวกับการเป็นตัวแทนของผู้เขียน Excel ที่เลือกที่จะแสดงตัวเลข
phresnel

-1

เหมือนที่ได้กล่าวไว้ข้างต้นนี่เป็นข้อผิดพลาดในการเป็นตัวแทนภายใน Excel ได้เลือกตัวเลือกสำหรับความแม่นยำสองเท่าและตัวเลขทศนิยม 64 บิต สิ่งนี้ทำให้คุณมีค่าที่เป็นไปได้2 64 โดเมนตัวเลขจริงมีจำนวนอนันต์ของค่าดังนั้นเมื่อคุณพยายามใช้โดเมนที่ไม่สามารถแสดงได้โดย Excel จะใช้โดเมนที่ใกล้เคียงที่สุดที่สามารถแสดงได้

ฉันเคยเห็นความคิดเห็นที่บอกว่าให้หน่วยความจำที่ไม่มีที่สิ้นสุดจำนวนจริงใด ๆ สามารถแสดง จริง แต่ไม่มีสิ่งเช่น "หน่วยความจำที่ไม่มีที่สิ้นสุด" ดังนั้นนี่คือจุดที่สงสัย คนอื่น ๆ ระบุว่า Excel อาจใช้การเป็นตัวแทนภายในที่ใหญ่กว่าเช่น 128 บิต จริง แต่ปรากฎว่าคอมพิวเตอร์ดีกว่าในการดำเนินการทางคณิตศาสตร์กับตัวเลขที่แสดงด้วยจำนวนบิตที่ตรงกับขนาดบัสของโปรเซสเซอร์ ดังนั้นคอมพิวเตอร์ 32 บิตจะเร็วที่สุดในการดำเนินการทางคณิตศาสตร์กับตัวเลข 32 บิตและคอมพิวเตอร์ 64 บิตจะเร็วที่สุดในการดำเนินการทางคณิตศาสตร์กับตัวเลข 64 บิต หากและเมื่อใดจะมีคอมพิวเตอร์ขนาด 128 บิตเราสามารถคาดหวังให้ Excel ย้ายไปเป็นตัวแทนจำนวน 128 บิต นั่นจะยังคงให้ชุดจำนวนมาก แต่ จำกัด จำนวนที่สามารถแสดงได้

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

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