อธิบายความแม่นยำของจุดลอยตัวให้กับลูกค้า [ปิด]


23

วิธีที่ดีที่สุดในการอธิบายประเด็นการปัดเศษทศนิยมให้กับลูกค้าคืออะไร

ฉันรู้ว่า

http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

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

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


1
ฉันจะไม่รบกวน ...
John Shaft

1
นี่เป็นคำถามที่ยอดเยี่ยมจริงๆ +10 ถ้าฉันทำได้ ปัญหาที่พบบ่อยสำหรับนักพัฒนา
Cody Grey

2
มันไม่ได้เป็นปัญหาของรายละเอียดมันตอบ fi ทำไมไม่เพิ่มสิ่งที่ดูตัวเลขความแม่นยำทศนิยม 2 หลักคุณท้ายด้วย 5.9999999 และไม่ใช่ 6 และทำไมคุณต้องระบุความแม่นยำในการปัดเศษเมื่อผลลัพธ์ "ไม่ชัดเจน" ไม่มีตัวเลขทศนิยมมากกว่าสองหลัก หรือทำไมบางครั้ง 2 ลบ 2 ไม่ได้เป็นศูนย์เสมอและดูไม่เหมือนคนโง่เขลาขณะทำเช่นนั้น
Eric Grange

9
@Eric Grange: หากลูกค้าของคุณพิจารณาปัญหาความแม่นยำเหล่านั้นว่าเป็นข้อผิดพลาดแล้วมันเป็นข้อผิดพลาดและคุณต้องหาวิธีแก้ไข (อาจจะไม่ใช้การลอย) พวกเขาไม่สนใจว่าปัญหาความแม่นยำนี้มาจากไหน พวกเขาไม่สนใจว่าซอฟต์แวร์ของคุณทำงานอย่างไร พวกเขาต้องการให้มันทำงาน
David

3
@Eric: การใช้ทศนิยมเป็นรายละเอียดการใช้งาน ฉันทำซ้ำคำถามซึ่งไม่ได้อธิบายสิ่งที่อธิบายไว้ในคำถามและสิ่งใดที่ฉันไม่ชัดเจน (ขอโทษ): บริบทคืออะไรและทำไมคุณถึงพูดถึงการใช้จุดลอยตัวกับลูกค้า
Tom Anderson

คำตอบ:


8

ผมพบวิธีง่ายๆในการอธิบายเรื่องนี้คือการแสดงให้เห็นถึงมัน อภิปรายว่าการหาร xด้วยตัวเลขจากนั้นคูณด้วยจำนวนเดียวกันจะนำคุณกลับมาxอีกครั้ง - ให้ลูกค้ายอมรับว่าสิ่งนี้ควรเกิดขึ้นเสมอ จากนั้นทำสิ่งเก่า(100 / 3) * 3บนเครื่องคิดเลข แสดงให้เห็นว่าค่าไม่เป็นไปตามที่คุณคาดหวังกลับไปที่ 100 เมื่อคนส่วนใหญ่เห็นว่าคณิตศาสตร์ง่าย ๆ "หมดสภาพ" แล้วมีแนวโน้มที่จะ 'ได้รับ' อันตรายจากตัวเลขจุดลอยตัวที่ความแม่นยำเป็นสิ่งสำคัญ วิธีแทนที่จะเป็นบทความระดับต่ำที่คุณจะเข้าสู่ระดับต่ำ)

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


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

2
@Scott ฉันลองใช้เครื่องคิดเลขสองสามตัวที่นี่ไม่มีปัญหาที่จัดแสดงด้วย (100/3) * 3 แม้แต่ (100/3) * 3-100 ก็ไม่พบปัญหา ... Excel ทำให้ถูกต้องเช่นกัน
Eric Grange

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

4
ไม่ต้องกังวลกับเครื่องคิดเลข หาร 1 ด้วย 3 บนกระดาษโดยเก็บตัวเลขสามหลักไว้
David Thornley

5
@omegacentauri ถ้าคุณคิดว่าคำอธิบายช่วยได้ฉันเดาว่าคุณไม่ได้คุยกับลูกค้าบ่อย ๆ
jhocking

5

ฉันไม่คิดว่าจะมีทางลัด คุณต้อง:

  • ทำความเข้าใจกับสิ่งที่เป็นจุดลอยตัวและวิธีการทำงาน

หรือถ้าจำเป็นมากเกินไปคุณต้อง:

  • ยอมรับว่าคอมพิวเตอร์จะไม่ให้ผลลัพธ์ตัวเลขที่แน่นอนแก่คุณ

บางทีเช่นกับตัวเลขไม่ลงตัวจะช่วยให้ sqrt(2) ~ 1.414(แม้ว่าลอยจุดประเด็นนำไปใช้กับตัวเลขเหตุผลเช่นกัน): 1.414^2 = 1.999396แล้วก็ 2ไม่ว่ากี่ตัวเลขที่คุณทำคุณจะไม่ได้รับค่อนข้างกลับไปที่เดิม ตกลงตัวเลข 4 หลักที่ถูกต้องอาจยอมรับได้ แต่ให้พิจารณาว่าจะเกิดอะไรขึ้นเมื่อ "ข้อผิดพลาดในการปัดเศษ" สะสม นั่นคือสิ่งที่อันตรายที่แท้จริงคือ


2
โดยส่วนตัวฉันรู้และเข้าใจ แต่สำหรับบางคน "จุดลอยตัว" นั้นเป็นคำต่างด้าวดังนั้นคุณต้องการคำอธิบายทางคณิตศาสตร์หรือวิทยาศาสตร์มากกว่าเพื่ออธิบายว่าสิ่งที่พวกเขาสามารถคำนวณได้ในหัวคอมพิวเตอร์และซอฟต์แวร์ราคาแพงมีปัญหาในการแก้ไข ;) สแควร์รูทอยู่นอกขอบเขตประจำวันของลูกค้าทั่วไป
Eric Grange

5

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

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

สำหรับตัวเลขโดยทั่วไปคุณสามารถลองหาทศนิยมสิบสามหลักเช่น x * 3 คือ 10 ซึ่งแสดงหลักการพื้นฐาน

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


3

ตัวเลขจุดลอยตัวในคอมพิวเตอร์ใช้เลขฐานสองเช่นเดียวกับที่เรามีระบบตัวเลขที่มีจำนวนสิบหลักร้อยและสิบคอลัมน์ร้อยคอลัมน์จำนวนจุดลอยตัวในคอมพิวเตอร์จริง ๆ มีเลขสอง, สี่, และครึ่ง, ไตรมาสและ เสาที่แปด หากลูกค้ามีความคุ้นเคยกับฟุต / นิ้วให้เตือนพวกเขาถึงวิธีการที่คุณใช้เศษส่วนฐาน 2 นิ้วในการวัด

ตอนนี้พยายามเก็บ 10 เซนต์เป็นการรวมกันของครึ่งไตรมาสแปดของดอลลาร์ มันไม่ทำงาน:

.00011001100110011 . . ( ทำซ้ำไม่สิ้นสุด )

มันเหมือนกับการใช้เทปวัดมาตรฐานของจักรวรรดิและพยายามวัดหนึ่งในสิบของนิ้ว คุณทำไม่ถูกต้อง ไม่มีการแทนค่า 1/10 เนื่องจาก X / Y โดยที่ X และ Y เป็นตัวเลขทั้งหมดและ Y คือกำลังของ 2

นั่นเป็นเหตุผลที่เรามีประเภทข้อมูลทศนิยมที่ใช้ 4 บิตในการจัดเก็บแต่ละหลักทศนิยมดังนั้นเราจึงกลับไปที่การแสดงฐาน 10 การแลกเปลี่ยนอยู่ในพื้นที่และประสิทธิภาพ (ประมาณ 100% ของประสิทธิภาพที่ได้รับจากสิ่งที่ฉันได้อ่าน)


1

บอกพวกเขาว่าเช่นเดียวกับบัญชีธนาคารของพวกเขาไม่สามารถถือ 4.4423425908459032890413 ... ดอลลาร์ (เป็นทั้ง $ 4.44 หรือ $ 4.45 ไม่มีอะไรในระหว่างนั้น) คอมพิวเตอร์ไม่สามารถเก็บตัวเลขได้อย่างง่ายดายด้วยความแม่นยำโดยพลการ ความไม่สมบูรณ์ของการจัดเก็บนำไปสู่ความไม่สมบูรณ์ของการคำนวณ

(มันโกงเล็กน้อย แต่ควรให้พวกเขารู้ว่าปัญหาคืออะไร)


2
อนิจจาคำอธิบายนั้นใช้ไม่ได้เนื่องจากปัญหาความแม่นยำอาจเกิดขึ้นได้เมื่อรวมจำนวนที่ทุกคนมีความแม่นยำเพียงสองหลักในการเริ่มต้น
Eric Grange

1
ทศนิยมสองหลัก ใช่ฉันเห็นด้วยลูกค้าที่อยากรู้อยากเห็นจะเห็นรูอยู่ในนั้น แต่จากนั้นคุณสามารถตีพวกเขาด้วยการอภิปรายเกี่ยวกับการเป็นตัวแทนไบนารี - พวกเขาขอมัน ;-)
quant_dev

ทีนี้พยายามอธิบายจุดลอยตัวที่พวกเขา IME เริ่มคิดทันทีว่าคุณกำลังพยายามที่จะไขว้เขวพวกเขาซึ่งเป็นสิ่งที่สามารถบรรเทาได้หากมันมาในแง่ง่ายเข้าใจง่ายหรือจากสถาบันหรือ บริษัท ที่มีชื่อเสียง :)
Eric Grange

1
@Eric Math ยากลองไปเล่นเบสบอลกัน
เถอะ

1
ถามว่าการวัดบางอย่างใกล้เคียงกับ 1/10 "หรือมิลลิเมตรที่ใกล้ที่สุดนั้นแม่นยำกว่านี้หรือไม่ แต่วัตถุที่มีความแม่นยำ 0.1" จะไม่เป็น 1 เท่าของความแม่นยำนอกจากว่าพวกเขาจะเป็น ผลคูณที่แม่นยำของ 5 "(แม่นยำ 127 มม.) การเพิ่มขนาดของวัตถุ 2.54 มม. สองตัวที่วัดได้ใกล้ที่สุด 0.1" จะให้ผลรวมขนาด 0.2 "การเพิ่มขนาดที่ปัดไปยังมิลลิเมตรที่ใกล้ที่สุดจะให้ผล 6 มม. ขนาดจริงควรเป็น 5.08 มม.
supercat

1

2/3

ขอให้พวกเขาเขียนคำตอบที่ถูกต้องให้กับสองหารด้วย 3
เนื่องจากคำตอบ 'ดำเนินต่อไปตลอดกาล' คุณสามารถชี้ให้เห็นได้

การใช้ 1/3 จะใช้งานได้ แต่ 2/3 อาจเป็นตัวอย่างที่ดีกว่าเล็กน้อยเนื่องจากการปัดเศษให้คุณ (เช่น) .6666667 ในขณะที่. 3333333 ดูเหมือนว่ามันจะถูกตัดทอน


0

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


ฉันไม่เข้าใจสิ่งที่คุณกำลังพูดที่นี่ "เพราะการใช้การประมาณนั้นเร็วกว่ามาก" บางครั้งเลขคณิตเลขจำนวนเต็มอย่างน้อยก็เร็วและแม่นยำ บางครั้งไม่มีทางเลือกอื่น (เช่นการพิมพ์สแควร์รูทของ 2)
David Thornley

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

0

การคำนวณบางอย่างทำตามกฎของกฎหมาย ตัวอย่างเช่นหากคุณต้องการคำนวณภาษีรายได้ที่ต้องชำระในรายได้ต่อปีที่ต้องเสียภาษีจำนวน€ 79.245,18 ในประเทศเยอรมนีมีคำตอบที่ถูกต้องเพียงข้อเดียว คุณทำให้ถูกต้องหรือคุณเข้าใจผิด หากคุณทำให้ถูกต้องคุณไม่จำเป็นต้องอธิบายวิธีการคำนวณเลขทศนิยม หากคุณเข้าใจผิดคุณไม่จำเป็นต้องอธิบายวิธีการคำนวณทางคณิตศาสตร์แบบเลขทศนิยมคุณต้องแก้ไขรหัสที่ใช้งานไม่ได้

บางครั้งคุณแสดงผลลัพธ์ที่ไม่ถูกต้อง ตัวอย่างเช่นหากคุณแปลง US $ 13,297.46 เป็น UK £ด้วยตัวเลขทศนิยมสองหลักแล้วแปลงจำนวน UK £กลับเป็น US $ คุณอาจไม่ได้รับ US $ 13,297.46 แต่ US $ 13,297.45 หรือ US $ 13,297.47 นั่นไม่เกี่ยวอะไรกับเลขคณิตทศนิยม มันเป็นปัญหาที่หลีกเลี่ยงไม่ได้และคุณควรอธิบายว่าทำไมมันถึงหลีกเลี่ยงไม่ได้ (คุณควรทราบด้วยว่าทำไมปัญหาไม่เกิดขึ้นเมื่อคุณแปลงจากสหราชอาณาจักร£เป็น US $ และย้อนกลับ)

มีผลลัพธ์ที่เป็นไปได้อื่น ๆ ที่ไม่ถูกต้อง หากคุณแปลงตัวเลขเป็นเปอร์เซ็นต์เปอร์เซ็นต์ควรเพิ่มขึ้นเป็น 100% แต่อาจไม่ได้ หากคุณแสดงสี่เปอร์เซ็นต์ด้วยทศนิยมสองครั้งเปอร์เซ็นต์ที่แสดงทั้งสี่อาจเพิ่มขึ้นได้ถึง 99.99% หรือ 100.01% ไม่มีอะไรเกี่ยวข้องกับเลขคณิตทศนิยม คุณก็ควรจะสามารถอธิบายได้ว่าทำไม

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

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