CodeQuiz EP.25 - คอมฯ บวกลบทศนิยมยังไง?

https://storage.googleapis.com/code-leagues/Suttitat_Sangsuwan_81730d8b3d/Suttitat_Sangsuwan_81730d8b3d.png

พี่ชีต้าร์ สุทธิทัต

เผยแพร่เมื่อ

อัปเดตล่าสุดเมื่อ

CodeQuiz EP.25 - คอมฯ บวกลบทศนิยมยังไง?

สาระสำคัญ

  • ทบทวน IEEE754 และการบวกเลขฐาน 2
  • วิธีการบวกลบเลขของ IEEE754
  • สรุปวิธีการบวกลบเลข IEEE754 สั้นๆ

IEEE754 คืออะไร?

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 02.png

จาก EP.23 เรารู้ว่า เลขทศนิยมในคอมพิวเตอร์ เก็บโดยใช้หลักการเก็บเลขทศนิยม IEEE754 ซึ่งเราเก็บ 3 อย่างด้วยกันได้แก่

  • sign (เลขเป็นบวกหรือลบ)
  • exponent (เลขชี้กำลัง)
  • fraction (เลขนัยสําคัญ)

ถ้าหากใครอยากรู้วิธีการเก็บเลขทศนิยมในคอมพิวเตอร์แบบละเอียด สามารถย้อนกลับไปอ่าน EP.23 ได้ที่นี่นะ


คอมพิวเตอร์บวกลบเลขทศนิยมฐาน 2 ยังไง?

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง op1.png

ถ้าหากเราจำวิธีการบวกเลขฐาน 2 จาก EP.20 ไม่ได้ พี่จะสรุปสั้นๆให้

เราจะเริ่มจากหลักท้ายสุด ไปหลักหน้าสุด คล้ายๆกับที่เราบวกเลขฐาน 10 เลย

หลักการบวกของเราคือ

  1. 0 + 0 = 0
  2. 0 + 1 = 1
  3. 1 + 0 = 1
  4. 1 + 1 = 10 หรือง่ายๆคือ เราทดเลข 1 ไว้ในหลักถัดไปนั่นเอง
CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง op2.png

ส่วนการลบก็จะทำเหมือนกัน โดยมีหลักการคือ

  1. 0 - 0 = 0
  2. 0 - 1 = -1 โดยเราสามารถยืมเลขจากหลังด้านหน้าได้เหมือนกับการลบเลขฐาน 10 เลย
  3. 1 - 0 = 1
  4. 1 - 1 = 0

แล้ว IEEE754 เขาบวกลบกันยังไง 🤔

เราต้องเข้าใจก่อนว่า เวลาคอมพิวเตอร์บวกเลข คอมพิวเตอร์จะเรียนข้อมูลนั้นมาเก็บไว้ใน processer (ปกติเราจะรู้จักกันในชื่อ CPU) หลังจากนั้นจึงทำการบวกลบเลขกัน แล้วจึงนำค่าที่ได้ไปเก็บไว้

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

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 03.png

ถ้าหากเราจำสมบัติการแจกแจงที่เราเรียนกันสมัยประถมได้ ซึ่งบอกว่า a(b ± c) = ab ± ac

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 04.png

เรามาดูเคสที่ง่ายๆกันก่อน นั่นคือ เลขชี้กำลัง (exponent) ของทั้งสองตัวเลขเท่ากัน, เราจะสามารถดึง 2^(exponent) ออกมาได้ด้วยสมบัติการแจกแจง พอเป็นแบบนี้ สิ่งที่เราต้องทำก็มีแค่นำตัวเลขในวงเล็บ 2 ตัวมาบวกลบกัน

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 05.png

แต่หลายๆคนอาจสงสัยว่า แล้วถ้าเป็นกรณีที่เลขชี้กำลังไม่เท่ากันล่ะ จะบวกลบกันอย่างไร

ซึ่งวิธีการที่คอมพิวเตอร์ใช้นั่นก็คือ ปรับให้ตัวเลขที่เลขชี้กำลังน้อยกว่า ให้มีเลขชี้กำลังเท่ากัน เช่น 1.1 × 2² + 1.01 × 2³

เราจะแปลง 1.1 × 2² ให้มีเลขชี้กำลังเท่ากับเลขอีกตัว โดยทุกครั้งที่เราเพิ่มเลขชี้กำลังไป 1 เราจะขยับตัวเลขไปทางด้านขวา 1 หลัก หรือก็คือ 1.1 × 2² → 0.11 × 2³ นั่นเอง

หลังจากที่เราลวกลบเลขแล้ว เราจะจัดรูปให้อยู่ในรูปที่ตรงตามหลัก IEEE754 แล้วจึงเก็บไว้ในคอมพิวเตอร์

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 06.png

สรุปแล้ว หลักการในการบวกลบเลข IEEE754 ของคอมพิวเตอร์ก็คือ

  1. ปรับเลขชี้กำลังให้เท่ากัน โดยปรับให้เลขที่เลขชี้กำลังน้อยที่สุด มีเลขชี้กำลังเท่ากับเลขอีกตัวนึง
  2. บวกลบเลขนัยสำคัญเข้าด้วยกัน
  3. จัดรูปในอยู่ในรูปที่ IEEE754 เก็บได้
  4. แปลงเป็น IEEE754

เรามาดูตัวอย่างกันดีกว่า

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 07.png

ถ้าเรามี IEEE754 single precision อยู่ 2 ตัว a, b แล้วเราอยากรู้ค่าของ a - b โดยที่

  • a = 0 01111110 10000000000000000000000
  • b = 0 01111111 10000000000000000000000

ถ้าน้องๆลองแปลงเป็นเลขฐาน 10 เราจะได้ว่า a = 0.75 และ b = 1.5

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 08.png

เราจะแปลงทั้งคู่เป็นรูปแบบที่คอมพิวเตอร์เข้าใจ นั้นคือ

  • a = 1.1 × 2^(-1)
  • b = 1.1 × 2⁰

เราจะเห็นว่าเลขชี้กำลังไม่เท่ากัน โดยที่เลยชี้กำลังของ b มีค่ามากกว่ากว่า เราเลยมาแก้ a ให้เป็น

  • a = 0.11 × 2⁰
CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 09.png

ตอนนี้เลขชี้กำลังเท่ากันแล้ว เรามาลบทั้งคู่กันเลยดีกว่า

a - b = (0.11 - 1.1) × 2⁰

เราจะได้

a - b = -0.11 × 2⁰

เมื่อจัดรูปจะได้

a - b = -1.1 × 2^(-1)

CodeQuiz EP.25 - คอมพิวเตอร์ บวกเลขทศนิยมยังไง 10.png

เมื่อแปลงเป็นเลข IEEE754 ว่า

a - b = 1 01111110 10000000000000000000000

หรือก็คือ -0.75 นั่นเอง


สรุป

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