ผู้ใช้:Zyaxious/กระบะทราย

จากวิกิพีเดีย สารานุกรมเสรี

จำนวนจุดลอยตัวความเที่ยงหนึ่งเท่า[แก้]

ในการการประมวลสารสนเทศ จำนวนจุดลอยตัวความเที่ยงหนึ่งเท่า (single-precision floating-point number) คือรูปแบบจำนวนทางคอมพิวเตอร์ชนิดหนึ่ง ซึ่งใช้เนื้อที่ 32 บิต (4 ไบต์) ในหน่วยความจำคอมพิวเตอร์

ตัวแปรจำนวนจุดลอยตัวสามารถแทนค่าจำนวนที่มีพิสัยกว้างกว่าตัวแปรจำนวนจุดตรึงที่มีความกว้างบิตเท่ากันโดยการสูญเสียนัยสำคัญ ตัวแปรจำนวนเต็มแบบคิดเครื่องหมาย 32 บิต มีค่าสูงสุดเท่ากับ 231 − 1 หรือ 2,147,483,647 ซึ่งในทางตรงกันข้ามตัวแปรจำนวนจุดลอยตัวฐานสอง 32 บิตตาม IEEE 754 มีค่าสูงสุดเท่ากับ (2 − 2−23) × 2127 ≈ 3.402823 × 1038 จำนวนเต็มใด ๆ ที่มีเลขโดดฐานสิบไม่เกิน 6 หลัก และจำนวนจริงใด ๆ ที่เขียนให้อยู่ในรูปของ 2n ได้โดยที่ n เป็นจำนวนเต็มตั้งแต่ -126 ถึง 127 สามารถแปลงค่าให้เป็นจำนวนจุดลอยตัว IEEE 754 โดยไม่สูญเสียความเที่ยง

ในมาตรฐาน IEEE 754-2008 รูปแบบฐานสอง 32 บิตเรียกอย่างเป็นทางการว่า binary32 ซึ่งในมาตรฐาน IEEE 754-1985 เรียกว่า single และมาตรฐาน IEEE 754 ได้กำหนดรูปแบบจำนวนจุดลอยตัวเพิ่มเติม อาทิ ความเที่ยงสองเท่าฐานสอง 64 บิต และแทนจำนวนฐานสิบ

หนึ่งในภาษาโปรแกรมแรกที่รองรับชนิดข้อมูลจำนวนจุดลอยตัวความเที่ยงทั้งหนึ่งและสองเท่าคือภาษาฟอร์แทรน ก่อนการนำไปใช้อย่างแพร่หลายตาม IEEE 754-1985 การแทนค่าและคุณสมบัติของรูปแบบข้อมูลจำนวนจุดลอยตัวขึ้นอยู่กับผู้ผลิตฮาร์ดแวร์และแบบจำลองคอมพิวเตอร์ รวมถึงการตัดสินใจของนักออกแบบภาษาโปรแกรม เช่น ชนิดจำนวนจุดลอยตัวความเที่ยงหนึ่งเท่าของภาษาจีดับเบิลยูเบสิก เป็นรูปแบบจำนวนจุดลอยตัว 32 บิตตาม MBF

ความเที่ยงหนึ่งเท่าเรียกว่า REAL ในภาษาฟอร์แทรน SINGLE-FLOAT ในภาษาคอมมอนลิสป์ float ในภาษาซี ภาษาซีพลัสพลัส, ภาษาซีชาร์ป, ภาษาจาวา Float ในภาษาแฮสเกลล์ และ Single ในภาษาอ็อบเจกต์ปาสกาล (ภาษาเดลไฟล์), ภาษาวิชวลเบสิก, และแมตแล็บ ส่วนการเรียก float ในภาษาไพทอน, ภาษารูบี, ภาษาพีเอชพี, ภาษาโอเคเมิล และ single ในภาษาอ็อกเทฟเวอร์ชันก่อน 3.2 หมายถึงตัวเลขความเที่ยงสองเท่า ในการดำเนินการของภาษาโพสต์สคริปต์และบางระบบฝังตัวรองรับเพียงความเที่ยงหนึ่งเท่าเท่านั้น

รูปแบบจุดลอยตัวฐานสองความเที่ยงหนึ่งเท่าตาม IEEE-754: binary32[แก้]

มาตรฐาน IEEE 754 กำหนดให้ binary32 มี

ซึ่งมีความเที่ยงเลขโดดฐานสิบตั้งแต่ 6 ถึง 9 หลัก หากสายอักขระที่มีจำนวนเลขโดดฐานสิบไม่เกิน 6 หลักซึ่งแปลงให้เป็นจำนวนจุดลอยตัวความเที่ยงหนึ่งเท่าตาม IEEE 754 แล้วแปลงกลับให้เป็นสายอักขระที่มีจำนวนเลขโดดฐานสิบเท่ากัน ผลลัพธ์ที่ได้ควรตรงกับสายอักขระเดิม และหากจำนวนจุดลอยตัวความเที่ยงหนึ่งเท่าตาม IEEE 754 ซึ่งแปลงให้เป็นสายอักขระที่มีจำนวนเลขโดดฐานสิบไม่ต่ำกว่า 9 หลัก แล้วแปลงกลับให้เป็นการแทนจำนวนความเที่ยงหนึ่งเท่า ผลลัพธ์ที่ได้ต้องตรงกับจำนวนเดิม

บิตเครื่องหมาย กำหนดเครื่องหมายของจำนวนและซิกนิฟิแคนต์ เลขชี้กำลังเป็นได้ทั้งจำนวนเต็มแบบคิดเครื่องหมาย 8 บิต ตั้งแต่ −128 ถึง 127 (คอมพลีเมนต์ฐานสอง) หรือจำนวนเต็มแบบไม่คิดเครื่องหมาย 8 บิต ตั้งแต่ 0 ถึง 255 ซึ่งเป็นแบบไบแอสที่ยอมรับในคำนิยามของ binary32 ตาม IEEE 754 หากใช้รูปแบบจำนวนเต็มแบบไม่คิดเครื่องหมาย ค่าของเลขชี้กำลังที่ใช้ในเลขคณิตจะเลื่อนตามค่าของไบแอส ซึ่งในกรณีของ binary32 ตาม IEEE 754 คือ 127 (กล่าวคือการที่จะทำให้ 2e − 127 มีค่าเท่ากับหนึ่ง e ต้องมีค่าเท่ากับ 127) การที่เลขชี้กำลังมีค่าตั้งแต่ −126 ถึง 127 นั้นเนื่องจากเลขชี้กำลังที่มีค่า −127 และ 128 สงวนไว้สำหรับจำนวนพิเศษ

ซิกนิฟิแคนด์แท้จริง ประกอบด้วยบิตเศษส่วน 23 บิตซึ่งอยู่ด้านขวาของจุดทศนิยมฐานสองและบิตนำที่ซ่อนไว้ (อยู่ด้านซ้ายของจุดทศนิยมฐานสอง) ซึ่งมีค่าเท่ากับ 1 เว้นแต่ในกรณีที่เลขชี้กำลังที่เก็บบันทึกไว้เป็นศูนย์ ด้วยเหตุนี้จึงมีบิตเศษส่วนปรากฏอยู่ในรูปแบบหน่วยความจำเพียง 23 บิตเท่านั้น แต่ความเที่ยงโดยรวมคือ 24 บิต (เทียบเท่ากับ log10(224) ≈ 7.225 หลัก) รูปแบบของบิตเป็นดังต่อไปนี้

ค่าแท้จริงโดยสมมติว่ามีข้อมูลที่ประกอบด้วยเครื่องหมาย sign, เลขชี้กำลัง e (จำนวนเต็มแบบไม่คิดเครื่องหมาย 8 บิต) และเศษส่วน 23 บิตในรูปแบบ binary32 ได้จาก

ซึ่งในฐานสิบ คือ

โดยในตัวอย่างนี้

จะได้ว่า

หมายเหตุ:

การเข้ารหัสเลขชี้กำลัง[แก้]

เลขชี้กำลังจุดลอยตัวฐานสองความเที่ยงหนึ่งเท่าเข้ารหัสโดยใช้การแทนค่าออฟเซตฐานสอง โดยออฟเซตศูนย์คือ 127 หรือเรียกอีกอย่างว่าไบแอสเลขชี้กำลังในมาตรฐาน IEEE 754

ฉะนั้น การหาค่าแท้จริงของเลขชี้กำลังที่นิยามไว้ในการแทนค่าออฟไซตฐานสอง เลขชี้กำลังที่เก็บบันทึกไว้ต้องลบด้วยออฟเซต 127

เลขชี้กำลัง 00H และ FFH ที่เก็บบันทึกไว้ตีความหมายเป็นพิเศษ

เลขชี้กำลัง ซิกนิฟิแคนด์เป็นศูนย์ ซิกนิฟิแคนด์ไม่เป็นศูนย์ สูตร
00H ศูนย์, -0 จำนวนต่ำกว่าบรรทัดฐาน (−1)บิตเครื่องหมาย×2−126× 0.บิตซิกนิฟิแคนด์
01H, ..., FEH จำนวนบรรทัดฐาน (−1)บิตเครื่องหมาย×2บิตเลขชี้กำลัง−127× 1.บิตซิกนิฟิแคนด์
FFH ±อนันต์ NaN (quiet, signaling)

ค่าสูงสุดของจำนวนบรรทัดฐานบวกคือ (2−2−23) × 2127 ≈ 3.4 × 1038 ค่าต่ำสุดของจำนวนบรรทัดฐานบวกคือ 2−126 ≈ 1.18 × 10−38 และค่าต่ำสุดของจำนวนต่ำกว่าบรรทัดฐานบวกคือ 2−149 ≈ 1.4 × 10−45

การแปลงค่าจากเลขฐานสิบเป็นรูปแบบ binary32[แก้]

มาตรฐาน IEEE 754 ระบุถึงการแปลงค่า (รวมถึงลักษณะของการปัดเศษส่วน) ของจำนวนจริงให้เป็นรูปแบบ binary32 อย่างเข้มงวด

ทีนี้เราสามารถแสดงวิธีการแปลงค่าจำนวนจริงฐานสิบให้เป็นรูปแบบ binary32 ตาม IEEE 754 โดยทำตามขั้นตอนดังต่อไปนี้