เศษส่วนฐานสิบและเศษส่วนฐานสอง
เรียนจบบทนี้แล้วจะ
- เข้าใจค่าประจำหลักของเศษส่วนฐานสิบและฐานสอง
- คำนวณค่าฐานสิบของเศษส่วนฐานสองได้
- แปลงเศษส่วนฐานสิบเป็นฐานสองด้วยการคูณ 2 ซ้ำ
- เข้าใจว่าบางค่า เช่น 0.1 ต้องประมาณเมื่อมีบิตจำกัด
หัวข้อในบทนี้
ค่าประจำหลักหลังจุดทศนิยม (ฐานสิบ)
หลังจุดทศนิยม ค่าประจำหลักลดลงทีละ 10 เท่า: หลักแรกหลังจุดมีค่า 10−1 = 0.1 หลักที่สองมีค่า 10−2 = 0.01 หลักที่สามมีค่า 10−3 = 0.001
น้ำหนักหลังจุดฐานสอง
ฐานสองก็เหมือนกัน แต่ลดลงทีละครึ่ง บิตที่ k หลังจุดมี 2−k เราเขียนเศษส่วนฐานสองในรูป 0.b1b2b3… โดย b1 คือบิตแรกหลังจุด
| บิตที่ | b1 | b2 | b3 | b4 | b5 | b6 |
|---|---|---|---|---|---|---|
| น้ำหนัก | 2−1 | 2−2 | 2−3 | 2−4 | 2−5 | 2−6 |
| เศษส่วน | 1/2 | 1/4 | 1/8 | 1/16 | 1/32 | 1/64 |
| ทศนิยม | 0.5 | 0.25 | 0.125 | 0.0625 | 0.03125 | 0.015625 |
ตัวอย่าง: 0.101₂ เป็นฐานสิบ
บวกน้ำหนักของบิตที่เป็น 1:
1/4น้ำหนักหลังจุด
ขั้นที่ 1 จาก 4: น้ำหนักหลังจุด
0 = 0
หลังจุดฐานสอง น้ำหนักลดลงทีละครึ่ง: 1/2, 1/4, 1/8, … (2 ยกกำลังลบ)
Fraction Explorer: เศษส่วนฐานสอง 16 บิต
บิตหลังจุด 16 บิต น้ำหนักตั้งแต่ 2−1 ถึง 2−16 กดบิตเพื่อสลับ แล้วดูค่าฐานสิบและตำแหน่งบนเส้นจำนวน 0–1 (แตะบิตเพื่อดูน้ำหนักแบบทศนิยมเต็ม)
0.10100000000000002
= 0.625
0.5 + 0.125
16 บิตเก็บได้ละเอียดสุด 2−16 = 0.0000152587890625 และค่ามากสุดคือ 0.9999847412109375 (ยังไม่ถึง 1)
แปลงเศษส่วนฐานสิบเป็นฐานสองด้วยการคูณ 2
วิธีที่ใช้กันคือคูณด้วย 2 ซ้ำ ๆ:
- เอาเศษส่วนคูณ 2
- ส่วนจำนวนเต็มที่ได้ (0 หรือ 1) คือบิตถัดไปหลังจุด
- เอาเฉพาะส่วนเศษไปทำข้อ 1 ต่อ จนเศษเป็น 0 หรือได้บิตครบตามที่ต้องการ
เหตุผล: การคูณ 2 เลื่อนจุดฐานสองไปทางขวาหนึ่งตำแหน่ง บิตแรกหลังจุดจึงโผล่มาอยู่หน้าจุดให้เราอ่านได้
1/18เริ่มต้น
ขั้นที่ 1 จาก 18: เริ่มต้น
เริ่มจาก 0.1 แล้วคูณ 2 ไปทีละรอบ
ทุกรอบคูณด้วย 2 แล้วดูส่วนจำนวนเต็ม: ได้ 1 แปลว่าบิตนั้นเป็น 1 แล้วเอาแค่ส่วนเศษไปคูณต่อ
ผลการแปลง (16 บิต)
0.0001100110011001…2
เป็นทศนิยมฐานสองซ้ำไม่รู้จบ: ชุด 0011 ยาว 4 บิต ซ้ำตั้งแต่บิตที่ 2 (ขีดเส้นด้านบนคือส่วนที่ซ้ำ)
- ค่าที่ป้อน
- 0.1
- ค่าประมาณจาก 16 บิต
- 0.0999908447265625
- ผลต่าง
- 0.0000091552734375
ที่นี่ตัดบิตที่เกินทิ้งไปเลย ส่วน IEEE 754 จะปัดเศษให้ใกล้ที่สุด ซึ่งจะได้เรียนในบทที่ 3
ทำไม 0.1 เก็บไม่พอดี
ลองแปลง 0.1 ด้วยเครื่องมือข้างบน จะเห็นว่าเศษวนกลับมาเป็นค่าเดิม (0.2 → 0.4 → 0.8 → 0.6 → 0.2 → …) จึงไม่มีวันเป็น 0 บิตชุด 0011 ซ้ำไปเรื่อย ๆ ตั้งแต่บิตที่ 2
คอมพิวเตอร์มีบิตจำกัด จึงต้องตัดที่จำนวนบิตหนึ่งแล้วได้แค่ ค่าประมาณ เช่นเก็บ 16 บิตได้ 0.0999908447265625 ต่างจาก 0.1 อยู่ 0.0000091552734375
ใช้ได้กับเศษส่วนแบบไหน
เศษส่วนฐานสิบจะแปลงเป็นฐานสองได้พอดีก็ต่อเมื่อเขียนเป็นเศษส่วนที่ตัวส่วนเป็น 2 ยกกำลังได้ เช่น 0.375 = 3/8 · ส่วน 0.1 = 1/10 มีตัวประกอบ 5 อยู่ในตัวส่วน จึงซ้ำไม่รู้จบเสมอ
สรุปท้ายบท
- หลังจุดฐานสิบ ค่าประจำหลักเป็น 10−1, 10−2, … ส่วนหลังจุดฐานสองเป็น 2−1, 2−2, … (0.5, 0.25, 0.125, …)
- ค่าของ 0.b₁b₂b₃…₂ = ผลรวมน้ำหนักของบิตที่เป็น 1 เช่น 0.101₂ = 0.5 + 0.125 = 0.625
- แปลงฐานสิบเป็นฐานสองด้วยการคูณ 2 ซ้ำ ส่วนจำนวนเต็มที่ได้แต่ละรอบคือบิตถัดไป
- บางค่า เช่น 0.1 ในฐานสองซ้ำไม่รู้จบ เมื่อมีบิตจำกัดจึงเก็บได้แค่ค่าประมาณ และมีความคลาดเคลื่อนเล็ก ๆ เสมอ