(หมายเหตุ: ฉันจะผนวก 'b' เพื่อระบุเลขฐานสองที่นี่ตัวเลขอื่น ๆ ทั้งหมดจะได้รับเป็นทศนิยม)
วิธีหนึ่งที่จะคิดเกี่ยวกับสิ่งต่าง ๆ คือในแง่ของบางอย่างเช่นสัญลักษณ์ทางวิทยาศาสตร์ เราเคยเห็นตัวเลขที่แสดงในรูปแบบทางวิทยาศาสตร์เช่น 6.022141 * 10 ^ 23 หมายเลขทศนิยมจะถูกเก็บไว้ภายในโดยใช้รูปแบบที่คล้ายกัน - mantissa และเลขชี้กำลัง แต่ใช้พลังของสองแทนสิบ
61.0 ของคุณสามารถเขียนใหม่เป็น 1.90625 * 2 ^ 5 หรือ 1.11101b * 2 ^ 101b ด้วย mantissa และ exponents หากต้องการคูณด้วยสิบและ (เลื่อนจุดทศนิยม) เราสามารถทำ:
(1.90625 * 2 ^ 5) * (1.25 * 2 ^ 3) = (2.3828125 * 2 ^ 8) = (1.19140625 * 2 ^ 9)
หรือด้วย mantissa และเลขชี้กำลังในไบนารี:
(1.11101b * 2 ^ 101B) * (1.01b * 2 ^ 11b) = (10.0110001b * 2 ^ 1000b) = (1.00110001b * 2 ^ 1001b)
สังเกตสิ่งที่เราทำที่นั่นเพื่อคูณตัวเลข เราเพิ่ม mantissas และเพิ่มเลขชี้กำลัง จากนั้นเมื่อแมนทิสซาสิ้นสุดลงมากกว่าสองครั้งเราจึงทำให้ผลลัพธ์เป็นปกติด้วยการชนเลขชี้กำลัง มันเหมือนกับเมื่อเราปรับเลขชี้กำลังหลังจากทำการดำเนินการกับตัวเลขในรูปแบบทางวิทยาศาสตร์ทศนิยม ในแต่ละกรณีค่าที่เราทำงานด้วยจะมีการแสดงแบบ จำกัด ในไบนารีและดังนั้นค่าที่ได้จากการคูณพื้นฐานและการดำเนินการเพิ่มเติมก็สร้างค่าด้วยการแทนแบบ จำกัด
ทีนี้ลองพิจารณาว่าเราแบ่ง 61 ด้วย 10 อย่างไรเราเริ่มด้วยการแบ่งตั๊กแตนตำข้าว, 1.90625 และ 1.25 ในทศนิยมนี้จะให้ 1.525 เป็นจำนวนสั้นที่ดี แต่ถ้าเราแปลงมันเป็นไบนารี่ เราจะทำตามวิธีปกติ - ลบกำลังที่ใหญ่ที่สุดของสองเท่าเมื่อทำได้เท่าที่ทำได้เช่นแปลงทศนิยมจำนวนเต็มเป็นไบนารี่ แต่เราจะใช้พลังลบสองตัว:
1.525 - 1 * 2 ^ 0 -> 1
0.525 - 1 * 2 ^ -1 -> 1
0.025 - 0 * 2 ^ -2 -> 0
0.025 - 0 * 2 ^ -3 -> 0
0.025 - 0 * 2 ^ -4 -> 0
0.025 - 0 * 2 ^ -5 -> 0
0.025 - 1 * 2 ^ -6 -> 1
0.009375 - 1 * 2 ^ -7 -> 1
0.0015625 - 0 * 2 ^ -8 -> 0
0.0015625 - 0 * 2 ^ -9 -> 0
0.0015625 - 1 * 2 ^ -10 -> 1
0.0005859375 - 1 * 2 ^ -11 -> 1
0.00009765625 ...
เอ่อโอ้. ตอนนี้เรากำลังมีปัญหา ปรากฎว่า 1.90625 / 1.25 = 1.525 เป็นเศษส่วนซ้ำเมื่อแสดงเป็นไบนารี่: 1.11101b / 1.01b = 1.10000110011 ... b เครื่องของเรามีบิตจำนวนมากที่จะถือแมนทิสซานั้นและพวกมันจะปัดเศษเศษส่วน และสมมติเลขศูนย์เกินกว่าจุดที่แน่นอน ข้อผิดพลาดที่คุณเห็นเมื่อคุณแบ่ง 61 ด้วย 10 คือความแตกต่างระหว่าง:
1.100001100110011001100110011001100110011 ... b * 2 ^ 10b
และพูดว่า:
1.100001100110011001100110011111111111111111111111111111111
เป็นการปัดเศษของ mantissa ที่นำไปสู่การสูญเสียความแม่นยำที่เราเชื่อมโยงกับค่าจุดลอย แม้ว่าจะสามารถแสดง mantissa ได้อย่างแน่นอน (เช่นเมื่อเพิ่มตัวเลขสองตัว) เราก็ยังสามารถสูญเสียตัวเลขได้หาก mantissa ต้องการตัวเลขมากเกินไปที่จะพอดีหลังจากปรับเลขชี้กำลังเป็นปกติ
เราทำสิ่งนี้ตลอดเวลาเมื่อเราปัดเลขทศนิยมให้มีขนาดที่สามารถจัดการได้และแค่ให้ตัวเลขสองสามตัวแรกของมัน เพราะเราแสดงผลลัพธ์เป็นทศนิยมมันให้ความรู้สึกเป็นธรรมชาติ แต่ถ้าเราปัดเศษทศนิยมแล้วแปลงเป็นฐานอื่นมันก็น่าเกลียดเหมือนกับทศนิยมที่เราได้รับเนื่องจากการปัดเศษทศนิยม