big-endian และ little-endian
big-endian และ little-endian เป็นคำอธิบายลำดับของกลุ่มไบต์ที่เก็บในหน่วยความจำของคอมพิวเตอร์ big-endian เป็นลำดับโดยที่ "big end"(มีค่านัยยะสำคัญในชุดข้อมูลที่เก็บเป็นอันดับแรก(ที่addressน้อยที่สุดของหน่วยเก็บข้อมูล little-endian เป็นลำดับโดยที่"little end"(มีความสำคัญน้อยในกลุ่มข้อมูล)จะได้รับการเก็บเป็นอันดับแรกเช่น คอมพิวเตอร์ big-end ต้องการ 2 ไบต์ ของเลขฐานหกหมายเลข 4FS2 จะได้รับการเก็บที่ 4FS2 ในหน่วยเก็บข้อมูล(ถ้า 4F เก็บที่ตำแหน่ง 1000 และ S2 จะเก็บที่ตำแหน่ง 1001)ในระบบ lettle-endion จะเก็บเป็น S24F (S2 เก็บที่ตำแหน่ง 1000 และ 4F ที่ 1001)Floating point
มาตรฐาน IEEE-754 เป็นมาตรฐานที่ถูกกำหนดขึ้นโดยหน่วยงาน ชื่อ IEEE (The Institute of Electrical and Electronics Engineers)เพื่อใช้เป็นมาตรฐานในการเก็บเลขทศนิยม (Floating Point) ในระบบคอมพิวเตอร์
ปัจจุบันของ IEEE 754 คือ IEEE 754-2008 ซึ่งเผยแพร่ในสิงหาคม ค.ศ.2008 ซึ่งถูกรวมเข้ากับต้นฉบับ IEEE 754-1985 ( ซึ่งถูกตีพิมพ์ในปี 1985) และมาตรฐาน IEEE สำหรับ Radix-Independent Floating -Point Arithmetic ( IEEE 854-1987 )
ในทางคอมพิวเตอร์ จำนวนจุดลอยตัว (อังกฤษ: floating point) คือระบบแทนจำนวนชนิดหนึ่ง ซึ่งจำนวนนั้นอาจมีขนาดใหญ่หรือขนาดเล็กเกินกว่าที่จะแทนด้วยจำนวนเต็ม เนื่องจากจำนวนต่าง ๆ สามารถเขียนแทนด้วยเลขนัยสำคัญ (mantissa) จำนวนหนึ่งโดยประมาณ และเปลี่ยนสเกลด้วยเลขชี้กำลัง (exponent) ฐานของสเกลปกติจะเป็น 2, 10 หรือ 16 เป็นต้น จำนวนทั่วไปจึงสามารถเขียนให้อยู่ในรูปแบบนี้ได้
คำว่า จุดลอยตัว จึงหมายถึงจุดฐาน (จุดทศนิยม หรือในคอมพิวเตอร์คือ จุดทวินิยม) ที่สามารถ "ลอยตัว" ได้ หมายความว่า จุดฐานสามารถวางไว้ที่ตำแหน่งใดก็ได้ที่สัมพันธ์กับเลขนัยสำคัญของจำนวนนั้น ตำแหน่งนี้แสดงไว้แยกต่างหากในข้อมูลภายใน และการแทนด้วยจำนวนจุดลอยตัวจึงอาจถือว่าเป็นสัญกรณ์วิทยาศาสตร์ในบริบทของคอมพิวเตอร์ หลายปีที่ผ่านมา คอมพิวเตอร์ใช้งานจำนวนจุดลอยตัวในรูปแบบที่แตกต่างกัน เวลาต่อมาจึงทำให้เกิดมาตรฐาน IEEE 754 สำหรับจำนวนที่พบได้อย่างปกติสามัญชนิดนี้
ข้อดีของจำนวนจุดลอยตัวที่มีต่อจำนวนจุดตรึง (fixed point รวมทั้งจำนวนเต็ม) คือจำนวนจุดลอยตัวสามารถรองรับค่าได้ในขอบเขตที่กว้างกว่า ตัวอย่างเช่น จำนวนจุดตรึงที่มีตัวเลขเจ็ดหลัก และกำหนดให้สองหลักสุดท้ายอยู่หลังจุด สามารถแทนจำนวนเหล่านี้ได้ 12345.67, 123.45, 1.23 ในขณะที่จำนวนจุดลอยตัว (ตามเลขฐานสิบของมาตรฐาน IEEE 754) ที่มีตัวเลขเจ็ดหลักเช่นกัน สามารถแทนจำนวนเหล่านี้ได้อีกเพิ่มเติม 1.234567, 123456.7, 0.00001234567, 1234567000000000 เป็นต้น แต่ข้อเสียคือรูปแบบของจำนวนจุดลอยตัวจำเป็นต้องใช้หน่วยเก็บข้อมูลมากขึ้นอีกเล็กน้อย (สำหรับเข้ารหัสตำแหน่งของจุดฐาน) ดังนั้นเมื่อจำนวนทั้งสองประเภทเก็บบันทึกอยู่ในที่ที่เหมือนกัน จำนวนจุดลอยตัวจะใช้เนื้อที่มากกว่าเพื่อเพิ่มความเที่ยง (precision)
การแทนค่าภายใน
โดยทั่วไปจำนวนจุดลอยตัวบรรจุอยู่ในข้อมูลคอมพิวเตอร์ เป็นบิตเครื่องหมาย เขตข้อมูลเลขชี้กำลัง และเขตข้อมูลซิกนิฟิแคนด์ (แมนทิสซา) ตามลำดับจากซ้ายไปขวา สำหรับรูปแบบ IEEE 754 ในฐานสองจะถูกแบ่งสรรดังนี้วิธีการปัดเศษ
วิธีการปัดเศษทางเลือกอื่นก็มีให้ใช้ได้ IEEE 754 ได้ระบุวิธีการปัดเศษไว้ดังนี้- ปัดเศษเข้าหาศูนย์(Round toward 0) (การปัดเศษทิ้ง คล้ายพฤติกรรมปกติในการแปลงจำนวนจุดลอยตัวเป็นจำนวนเต็ม เช่นจาก −3.9 เป็น −3)
- ปัดเศษขึ้น(Round toward + in finity(Ceiling)) (ในทิศทางเข้าสู่ +∞ ดังนั้นค่าลบจะปัดเศษเข้าหาศูนย์)
- ปัดเศษลง(Round toward - in finity(Floor)) (ในทิศทางเข้าสู่ −∞ ดังนั้นค่าลบจะปัดเศษออกจากศูนย์)
- ปัดเศษสู่ค่าใกล้สุด ซึ่งค่าที่อยู่กึ่งกลางจะปัดเศษในทิศทางออกจากศูนย์(Round toward, tie away from zero) (เป็นทางเลือกสำหรับจำนวนจุดลอยตัวฐานสอง และเป็นปกติสามัญในฐานสิบ)
- ปัดเศษสู่ค่าใกล้สุด ซึ่งค่าที่อยู่กึ่งกลางจะปัดเศษสู่เลขโดดที่เป็นเลขคู่ที่อยู่ใกล้สุดในตำแหน่งที่ต้องการ(Round to nearest, tie to even)(วิธีการปริยายและปกติสามัญที่สุด)
ตัวอย่าง
จงแสดงค่าในหน่วยความจำบนเครื่องคอมพิวเตอร์ 32-bit แบบ Big-Endian ของ -37.140625
ถ้าจัดเก็บแบบ Binary 16 (Sign : 1 bit, Exponent : 5 bit,
Mantissa : 10 bit, Bias :15)
37.140625 = 100101.001001
ซึ่งเขียนในรูปแบบ Scientific Notation เป็น 1.00101001001 X 2^5 (เลื่อนไป 5
ตำแหน่งเรียก 5 ว่าเป็น exponent ถ้าเลื่อนไปข้างหน้า
exponent จะเป็น + ถ้าเลื่อนจุดมาข้างหลัง
exponent จะเป็น - )
Biased Exponent(E) = Bias + exponent
= 15+5
= 20
= 0001 0100 แปลงเป็น เลขฐาน 2 จำนวน 5 bit ได้ 1 0100
Significant (Mantissa)(M) = 00101001001
Sign(6) = 1
- Sign = 0 --> ค่า +
- Sign = 1 --> ค่า -
1. (1101 0000 1010 0100)2 = (D0A4)16
2. (1101 0000 1010 0100)2 = (D0A4)16
3. (1101 0000 1010 0101)2 = (D0A5)16
4. (1101 0000 1010 0101)2 = (D0A5)16
5. (1101 0000 1010 0100)2 = (D0A4)16
***เกิดเศษขึ้นมาคือ 1 Bit เพราะฉะนั้น เราจะต้องทำการปัดเศษ
ปัดเศษ
1.ปัดเศษเข้าหาศูนย์(Round toward 0)
= (1101 0000 1010 0100 = D0A4
2.ปัดเศษขึ้น(Round toward + in finity(Ceiling))
= 1101 0000 1010 0100 = D0A4
3.ปัดเศษลง(Round
toward - in finity(Floor))
=
1101 0000 1010 0101 = D0A5
4.ปัดเศษสู่ค่าใกล้สุด
ซึ่งค่าที่อยู่กึ่งกลางจะปัดเศษในทิศทางออกจากศูนย์(Round toward, tie away from zero)
=
1101 0000 1010 0101 = D0A5
5.ปัดเศษสู่ค่าใกล้สุด
ซึ่งค่าที่อยู่กึ่งกลางจะปัดเศษสู่เลขโดดที่เป็นเลขคู่ที่อยู่ใกล้สุดในตำแหน่งที่ต้องการ(Round to nearest, tie to even)
=
(1101 0000 1010 0100)2 = (D0A4)16
เพราะฉะนั้น
ค่าในคอมพิวเตอร์ 32-bit
แบบ Big-Endian คือ D0 A4 0 0 0 0
ไม่มีความคิดเห็น:
แสดงความคิดเห็น