ข้ามไปที่เนื้อหา
บทที่ 2อ่านประมาณ 12 นาที

เศษส่วนฐานสิบและเศษส่วนฐานสอง

เรียนจบบทนี้แล้วจะ

  • เข้าใจค่าประจำหลักของเศษส่วนฐานสิบและฐานสอง
  • คำนวณค่าฐานสิบของเศษส่วนฐานสองได้
  • แปลงเศษส่วนฐานสิบเป็นฐานสองด้วยการคูณ 2 ซ้ำ
  • เข้าใจว่าบางค่า เช่น 0.1 ต้องประมาณเมื่อมีบิตจำกัด
หัวข้อในบทนี้

ค่าประจำหลักหลังจุดทศนิยม (ฐานสิบ)

หลังจุดทศนิยม ค่าประจำหลักลดลงทีละ 10 เท่า: หลักแรกหลังจุดมีค่า 10−1 = 0.1 หลักที่สองมีค่า 10−2 = 0.01 หลักที่สามมีค่า 10−3 = 0.001

0.375 = 3 × 10−1 + 7 × 10−2 + 5 × 10−3

น้ำหนักหลังจุดฐานสอง

ฐานสองก็เหมือนกัน แต่ลดลงทีละครึ่ง บิตที่ k หลังจุดมี 2−k เราเขียนเศษส่วนฐานสองในรูป 0.b1b2b3… โดย b1 คือบิตแรกหลังจุด

บิตที่b1b2b3b4b5b6
น้ำหนัก2−12−22−32−42−52−6
เศษส่วน1/21/41/81/161/321/64
ทศนิยม0.50.250.1250.06250.031250.015625

ตัวอย่าง: 0.101₂ เป็นฐานสิบ

บวกน้ำหนักของบิตที่เป็น 1:

1/4น้ำหนักหลังจุด

ขั้นที่ 1 จาก 4: น้ำหนักหลังจุด

0.
2−110.5
2−200.25
2−310.125

0 = 0

หลังจุดฐานสอง น้ำหนักลดลงทีละครึ่ง: 1/2, 1/4, 1/8, … (2 ยกกำลังลบ)

ขั้นที่ 1/4

Fraction Explorer: เศษส่วนฐานสอง 16 บิต

บิตหลังจุด 16 บิต น้ำหนักตั้งแต่ 2−1 ถึง 2−16 กดบิตเพื่อสลับ แล้วดูค่าฐานสิบและตำแหน่งบนเส้นจำนวน 0–1 (แตะบิตเพื่อดูน้ำหนักแบบทศนิยมเต็ม)

2−1
2−2
2−3
2−4
2−5
2−6
2−7
2−8
2−9
2−10
2−11
2−12
2−13
2−14
2−15
2−16

0.10100000000000002

= 0.625

0.5 + 0.125

16 บิตเก็บได้ละเอียดสุด 2−16 = 0.0000152587890625 และค่ามากสุดคือ 0.9999847412109375 (ยังไม่ถึง 1)

แปลงเศษส่วนฐานสิบเป็นฐานสองด้วยการคูณ 2

วิธีที่ใช้กันคือคูณด้วย 2 ซ้ำ ๆ:

  1. เอาเศษส่วนคูณ 2
  2. ส่วนจำนวนเต็มที่ได้ (0 หรือ 1) คือบิตถัดไปหลังจุด
  3. เอาเฉพาะส่วนเศษไปทำข้อ 1 ต่อ จนเศษเป็น 0 หรือได้บิตครบตามที่ต้องการ

เหตุผล: การคูณ 2 เลื่อนจุดฐานสองไปทางขวาหนึ่งตำแหน่ง บิตแรกหลังจุดจึงโผล่มาอยู่หน้าจุดให้เราอ่านได้

จำนวนบิต

1/18เริ่มต้น

ขั้นที่ 1 จาก 18: เริ่มต้น

0.0000000000000000

เริ่มจาก 0.1 แล้วคูณ 2 ไปทีละรอบ

ทุกรอบคูณด้วย 2 แล้วดูส่วนจำนวนเต็ม: ได้ 1 แปลว่าบิตนั้นเป็น 1 แล้วเอาแค่ส่วนเศษไปคูณต่อ

ขั้นที่ 1/18

ผลการแปลง (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

0.110 = 0.000112 (ซ้ำไม่รู้จบ)

คอมพิวเตอร์มีบิตจำกัด จึงต้องตัดที่จำนวนบิตหนึ่งแล้วได้แค่ ค่าประมาณ เช่นเก็บ 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 ในฐานสองซ้ำไม่รู้จบ เมื่อมีบิตจำกัดจึงเก็บได้แค่ค่าประมาณ และมีความคลาดเคลื่อนเล็ก ๆ เสมอ