จำนวนจุดลอยตัว: มันคืออะไร? อธิบายง่ายๆด้วยตัวอย่าง
ในเคล็ดลับที่ใช้งานได้นี้เราจะแสดงให้คุณเห็นว่าเลขทศนิยมคืออะไรและมันแตกต่างอย่างไรจากหมายเลขจุดคงที่
จำนวนจุดลอยตัว: มันคืออะไร?
ในวิทยาการคอมพิวเตอร์จำนวนจุดลอยตัวมักใช้สำหรับอุปกรณ์ตรวจวัดที่ควรทำงานด้วยความแม่นยำ
- หมายเลขจุดลอยตัว (หรือ "หมายเลขจุดลอยตัว") เป็นตัวแทนของตัวเลขโดยใช้สัญกรณ์ชี้แจง ในกรณีพิเศษจะใช้งานได้ประมาณเท่านั้น คุณยังสามารถแทนหมายเลข 1230000 ด้วยหมายเลข 1.23 ⋅10⁶
- 1.23 เรียกว่า "Mantissa" 10 คือ "ฐาน" และ 6 คือ "เลขชี้กำลัง" อนึ่งยังสามารถเพิ่มสัญญาณลงใน mantissa ได้ อย่างไรก็ตามคุณสามารถนำทุกอย่างไปใช้กับระบบคู่ได้ คุณยังสามารถแทนหมายเลข 10101100 ด้วยหมายเลข 1.0101100 ⋅2⁷ คอมพิวเตอร์จะจัดเก็บเครื่องหมาย mantissa และเลขชี้กำลังเท่านั้น
- คอมพิวเตอร์มักจะย้ายเครื่องหมายจุลภาคกลับไปกลับมาจนกว่าจะมีเพียง 1 หน้าเครื่องหมายจุลภาค จากนั้นพีซีจะต้องบันทึกตำแหน่งทศนิยมของ mantissa และเลขชี้กำลัง
- เพื่อให้สามารถบันทึกเลขชี้กำลังเป็นจำนวนบวก, จำนวนคงที่, อคติที่เรียกว่าจะถูกเพิ่ม เลขชี้กำลังที่เล็กที่สุดที่เป็นไปได้ของสถานที่ก่อนจุดทศนิยม (- อคติ) จะถูกบันทึกเป็น 0
- ตรงกันข้ามกับหมายเลขคงที่เครื่องหมายจุลภาคไม่ได้อยู่ที่จุดคงที่ในจำนวนจุดลอยตัว
Half, Float & Double - รหัสทั่วไปของตัวเลขจุดลอย
คุณได้เจอคำศัพท์ทั้งสามนี้อย่างแน่นอนโดยเฉพาะเมื่อเขียนโปรแกรมด้วย Arduino สิ่งเหล่านี้เป็นการรับรองมาตรฐาน
- ชนิดข้อมูล "half" เป็นตัวเลข 16 บิต บิตซ้ายสุดเป็นหน้าที่ของเครื่องหมาย เลขชี้กำลังมี 5 บิตและ mantissa 10 อคติที่ใช้คือ 15 เนื่องจาก mantissa บิตแรกคือ (เกือบ) เสมอ 1 นี่จะไม่ถูกบันทึกไว้
- ชนิดข้อมูล "float" (หรือ "single") คือหมายเลข 32 บิต ที่นี่เช่นกันใช้เป็นสัญลักษณ์ อย่างไรก็ตามเลขชี้กำลังมี 8 บิต (bias = 127) และ mantissa 23
- ชนิดข้อมูล "double" ยังใช้บิตสำหรับเครื่องหมาย อย่างไรก็ตามที่นี่เลขชี้กำลังมี 11 บิต (bias = 1, 023) และ mantissa ถึง 52 บิต โดยรวมแล้วนี่คือ 64 บิตคือ 8 ไบต์
- นอกเหนือจากประเภทข้อมูลทั่วไปทั้งสามนี้ยังมีอีกมากมาย อย่างไรก็ตามสิ่งเหล่านี้ส่วนใหญ่ไม่ได้ใช้เพราะความแม่นยำของครึ่งลอยและสองเท่าดีพอ
แปลงเลขทศนิยมให้เป็นตัวเลขทศนิยม - วิธีการทำงาน
สุดท้ายเราต้องการแสดงให้คุณเห็นว่าคุณสามารถแปลงเลขทศนิยมปกติให้เป็นตัวเลขทศนิยมได้อย่างไร
- ในตัวอย่างนี้เราใช้เลขทศนิยม 18.4 จำนวนก่อนจุดทศนิยมจะถูกโอนไปยังระบบคู่ครั้งแรก เป็นผลให้คุณควรได้รับ (10010) ₂
- จากนั้นคุณต้องแปลง 0.4 ก่อนคูณ 0.4 ด้วย 2 คุณจะได้รับ 0.8 ตามผลลัพธ์ จดบันทึกหมายเลขก่อนหน้าเครื่องหมายจุลภาค ในกรณีนี้มันคือ 0 จากนั้นคูณ 0.8 ด้วย 2 เวลานี้คุณจะได้ 1.6 ตามผลลัพธ์ จดบันทึกเลข 1 และคำนวณต่อไปด้วย 0.6 หลังจากนั้นไม่นานคุณจะสังเกตเห็นว่ารูปแบบซ้ำตัวเอง (ในตัวอย่างนี้) สุดท้ายเขียนตัวเลขทั้งหมดจากบนลงล่าง: 011001100110 ...
- จากนั้นเพิ่มตัวเลขเข้าด้วยกัน: เพิ่ม (⋅2⁰) เพื่อให้คุณได้รับ 10010.01100110 ... ⋅2⁰ จากนั้นย้ายเครื่องหมายจุลภาคจนกว่าจะมีเพียง 1 หน้าทศนิยมและยังเปลี่ยนพลังงานอย่างเหมาะสม ดังนั้นคุณควรได้รับ 1.001001100110 ... ⋅2⁴เนื่องจากคุณย้ายจุดทศนิยมไปทางซ้าย 4 ตำแหน่ง ขั้นตอนนี้เรียกว่า "normalizing"
- ในตัวอย่างนี้เราใช้ประเภทข้อมูล "ลอย" ดังนั้นเพิ่มค่าอคติที่เหมาะสมกับเลขชี้กำลังของคุณ คุณต้องแปลงผลลัพธ์ของการคำนวณ 4 + 127 = 131 เป็นเลขฐานสอง หมายเลข 131 คือหมายเลข 10000011 ในระบบคู่
- ตอนนี้คุณสามารถเขียนหมายเลขจุดลอยตัวที่เสร็จสิ้นแล้ว ก่อนอื่นเขียนบิตสำหรับสัญญาณ เนื่องจากมันเป็นจำนวนบวกบิตแรกคือ 0 จากนั้นคุณต้องเขียน 131 ทั้งหมดนี้ลงตัวพอดีในกรณีนี้เนื่องจากจำนวนนี้ต้องใช้ 8 บิตและ 8 บิตสำหรับการลอย ท้ายที่สุดคุณต้องเขียน mantissa 23 บิตแรกเนื่องจาก mantissa มี 23 บิตสำหรับการลอย
- หมายเลขทศนิยมของคุณเสร็จแล้วจึงควรเป็นหมายเลข 01000001100100110011001100110011 ชัดเจนน้อยคือหมายเลข 0 | 10000011 | 00100110011001100110011
แปลงเลขทศนิยมเป็นทศนิยม
สุดท้ายเราต้องการแสดงให้คุณเห็นว่าคุณสามารถแปลงตัวเลขทศนิยมเป็นทศนิยมอีกครั้งได้อย่างไร สำหรับสิ่งนี้เรารับหมายเลข 1000001100100110011001100110011
- ก่อนกรอกตัวเลข (ด้านหน้า) ด้วยเลขศูนย์จนกว่าคุณจะได้รับหมายเลข 16, 32 หรือ 64 บิต ในกรณีนี้มันคือ 01000001100100110011001100110011
- ตัวเลขตัวแรกหมายถึงเครื่องหมาย ดังนั้นจำนวนของเราเป็นบวก
- จากนั้นเขียนตัวเลขถัดไป (ในกรณีนี้) 8 หลักและลบอคติ (10000011) ₂ = 131 → 131 - 127 = 4 →ดังนั้นจึงมี "⋅2⁴" ที่ด้านหลัง
- ตอนนี้เขียน "1" แล้วตัวเลขที่เหลือทั้งหมดเช่นเดียวกับ "⋅2⁴": 1.001001100110011001100110011 ⋅ 200
- จากนั้นย้ายเครื่องหมายจุลภาค 4 ตำแหน่งไปทางขวาเพื่อให้คุณสามารถข้าม "⋅2⁴": 10010.01100110011001100110011
- ถัดไปแปลง 10010 เป็นจำนวนเต็มตามปกติ คุณจะได้ 18
- ตอนนี้คุณต้องแปลงตำแหน่งทศนิยม หลักแรกหลังจากเครื่องหมายจุลภาคมีค่า 1: 2¹หลักที่สอง 1: 2²และอื่น ๆ เพิ่มค่าและจำนวนก่อนเครื่องหมายจุลภาคจะให้หมายเลข 18.3999996185302734375
ในเคล็ดลับการปฏิบัติถัดไปเราจะแสดงให้คุณเห็นว่าคุณสามารถแปลงตัวอักษร ASCII เป็นตัวเลขไบนารีได้อย่างไร