ผู้ใช้:Zyaxious/กระบะทราย
นี่คือหน้าทดลองเขียนของ 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 มี
- บิคเครื่องหมาย: 1 บิต
- ความกว้างเลขชี้กำลัง: 8 บิต
- ความเที่ยงซิกนิฟิแคนด์: 24 บิต (ซ่อนไว้ 1 บิต)
ซึ่งมีความเที่ยงเลขโดดฐานสิบตั้งแต่ 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
- emin = 01H−7FH = −126
- emax = FEH−7FH = 127
- ไบแอสเลขชี้กำลัง = 7FH = 127
ฉะนั้น การหาค่าแท้จริงของเลขชี้กำลังที่นิยามไว้ในการแทนค่าออฟไซตฐานสอง เลขชี้กำลังที่เก็บบันทึกไว้ต้องลบด้วยออฟเซต 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 โดยทำตามขั้นตอนดังต่อไปนี้