อะไรคืออะไร? · bei.pm
ในหมวดหมู่นี้มีบทความเกี่ยวกับรูปแบบไฟล์และการวิศวกรรมย้อนกลับ
ตอนนี้มันเป็นเช่นนี้:
มีภาษาการเขียนโปรแกรมมากมายและผู้คนมากมายที่รู้จักบางสิ่งภายใต้ชื่อที่แตกต่างกันอย่างสิ้นเชิง - หรือแม้แต่ไม่มีความคิดเกี่ยวกับการมีอยู่ของสิ่งพื้นฐานที่สุดเพราะภาษาการเขียนโปรแกรมของพวกเขาได้ทำให้สิ่งนั้นถูกแยกออกไป
tl;dr:
การเขียนของฉันจะอิงตาม C99 <stdint.h>
ใครที่เข้าใจการเขียนแบบนี้จะสามารถเข้าใจการเขียนของฉันได้อย่างแน่นอน
จำนวนเต็ม
Integer ก็คือจำนวนเต็ม กล่าวคือจำนวนที่ไม่มีส่วนทศนิยม
โดยปกติแล้ว Integer จะถูกกำหนดในรูปแบบข้อมูลภายในขอบเขตของตัวเลขที่แน่นอน ซึ่งเรียกได้ว่าเป็นความละเอียด โดยจะระบุเป็นบิต - เนื่องจาก "ไบต์" และประเภทที่สร้างขึ้นจากมัน (Word, Qword, ...) มักจะขึ้นอยู่กับแพลตฟอร์ม
อีกทั้งยังมีการแบ่งประเภท Integer ออกเป็น จำนวนธรรมชาติ (ℕ, กล่าวคือ ไม่มีเครื่องหมาย - Unsigned) และ จำนวนเต็ม (ℤ, กล่าวคือ มีเครื่องหมาย - Signed).
ข้อมูลนี้จะแสดงให้เห็นผ่านเครื่องหมายในตัวระบุ (u
หรือ s
)
โดยจำนวนเต็มที่มีเครื่องหมายสามารถแสดงเป็น One's complement หรือ Two's complement.
ตราบใดที่ไม่ได้ระบุไว้เป็นอย่างอื่น จะใช้ Two's complement เนื่องจากเป็นรูปแบบการแสดงผลที่ได้รับความนิยมในวิทยาการคอมพิวเตอร์สมัยใหม่
จำนวนที่ไม่มีเครื่องหมายจะถูกระบุในเอกสารของฉันเป็น uint
พร้อมกับการระบุความแม่นยำใน Bits.
จำนวนที่มีเครื่องหมายจะถูกระบุในเอกสารของฉันเป็น sint
เช่นเดียวกัน พร้อมกับการระบุความแม่นยำใน Bits.
ฉันจะไม่ใช้ประเภทข้อมูล "char" สำหรับตัวอักษร เนื่องจากสตริงทั่วไปมักจะแสดงเป็นชุดค่าจำนวนเต็มพร้อมการตีความแบบพิเศษ.
ดังนั้นจึงแสดงเป็น uint(8)[]
ตัวอย่าง:
การแสดงผล | เทียบเท่า C99 stdint.h |
คำอธิบาย | ขอบเขตตัวเลข |
---|---|---|---|
uint(16) | uint16_t | จำนวนเต็มไม่ลงนาม, ความยาว 16 บิต | 0 - 65.535 |
sint(8) | int8_t | จำนวนเต็มที่ลงนาม, ความยาว 8 บิต, แบบสอง's complement | -126 - 127 |
uint(24) | uint32_t:24 | จำนวนเต็มไม่ลงนาม, ความยาว 24 บิต | 0 - 16.777.216 |
ค่าเลขทศนิยมแบบคงที่
ค่าคงที่ เป็นค่าตัวเลขจากสเปกตรัมของ จำนวนเชิงตรรกะ (Q) ซึ่งมี จุดทศนิยม และ ตำแหน่งหลังจุดทศนิยม
สำหรับค่าคงที่ - ซึ่งเป็นที่มาของชื่อ - ตำแหน่งของจุดทศนิยมถูกกำหนดโดยประเภทข้อมูลอย่างชัดเจน.
ดังนั้นจึงมีช่วงตัวเลขที่แน่นอนสำหรับตัวเลขประเภทนี้; กล่าวในทางคณิตศาสตร์คือช่วงตัวเลข จำกัด.
ในความเป็นจริง ประเภทข้อมูลนี้ถูกใช้กันมากในแพลตฟอร์มที่ไม่มีหน่วยประมวลผลจุดทศนิยมที่รวดเร็วเพียงพอ เนื่องจากการคำนวณค่าคงที่สามารถทำได้โดยใช้หน่วยจำนวนเต็ม
ประเภทข้อมูลนี้ยังถูกใช้โดยระบบการจัดการฐานข้อมูล เมื่อมี ข้อกำหนดที่ชัดเจน ที่ต้องปฏิบัติตาม.
ลองนึกถึงระบบที่ใช้เก็บข้อมูลทางการเงินอย่างถาวร; สกุลเงินส่วนใหญ่จำกัดที่ 2 ตำแหน่งหลังจุดทศนิยม.
(แต่ไม่ฉลาดที่จะใช้ค่าคงที่สำหรับสิ่งนี้; จะดีกว่าที่จะเก็บ หน่วยสกุลเงินที่เล็กที่สุด เป็นจำนวนเต็มโดยตรงและปล่อยให้ส่วนที่เหลือของระดับการนำเสนอ)
ในลักษณะเดียวกับการระบุจำนวนเต็ม ฉันจะระบุความละเอียดของค่าคงที่ ก่อน และ หลัง จุดทศนิยม:
ufixed(9,7)
หมายถึงประเภทข้อมูลที่ไม่มีเครื่องหมายสำหรับ 9 บิตสำหรับค่าก่อนจุดทศนิยม รวมทั้ง 7 บิตสำหรับค่าหลังจุดทศนิยม; รวมเป็น 16 บิต และสามารถครอบคลุมช่วงจาก (0,0) ถึง (511,127) ในฐานะเวกเตอร์ของจำนวนเต็มสองตัวที่ไม่ขึ้นกับกัน.
อย่างไรก็ตาม การตีความนี้จะทำให้สูญเสียตัวเลข 28 ตัวในรูปแบบทศนิยม เนื่องจากในทางปฏิบัติเรามักจะจำกัดที่สูงสุด (511,99).
แทนที่จะตีความค่าคงที่เป็นเวกเตอร์ของจำนวนเต็ม 2 ตัวที่แยกจากกัน - ซึ่งแทบจะหมายถึงว่ามีพื้นที่ข้อมูลที่ไม่ได้ใช้ในการแปลงเป็นจำนวนทศนิยมและการโอนด้วยมือ - สามารถตีความพื้นที่หลังจุดทศนิยมเป็น เศษส่วน ของการแสดงผลทั้งหมด.
โดยใช้ตัวอย่างที่กล่าวถึงก่อนหน้านี้ ufixed(9,7)
จะกลายเป็นเศษส่วนที่มีส่วนเศษเป็น 27 - ซึ่งช่วงตัวเลขจะอยู่ระหว่าง 0,00 ถึง 511 + 126⁄127
ดังนั้นในการแปลงเป็นรูปแบบทศนิยม ค่าหลังจุดทศนิยมจะต้องหารด้วย 128.
ด้วยวิธีนี้การดำเนินการคำนวณจะทำได้ง่ายขึ้น เนื่องจากการโอนจะเกิดขึ้นโดยอัตโนมัติ ทำให้วิธีนี้มักถูก เลือกใช้.
อย่างไรก็ตาม วิธีนี้มีข้อเสียตรงที่ตำแหน่งหลังจุดทศนิยมในรูปแบบทศนิยมจะไม่มีการรับประกันความละเอียดอีกต่อไป โดยที่ตำแหน่งทศนิยมเดียวจะไม่ได้มีค่าเท่ากับ 0.01
แต่จะมีค่าเป็น 0.007874
ซึ่งจะนำไปสู่อาการผิดพลาดในการปัดเศษ
วิธีการตีความที่ใช้จะถูกบันทึกไว้ตามจุดที่ใช้.
ค่าแบบเลขทศนิยม
ค่าแบบทศนิยม เป็นนิพจน์ทางคณิตศาสตร์ที่ซับซ้อนกว่า ซึ่งแสดงจำนวนเต็มที่มีความละเอียดคงที่ผ่านคำสั่งทางคณิตศาสตร์ในลักษณะที่สร้างส่วนทศนิยมขึ้นโดยการเลื่อน - และจึงมีการอ้างอิงโดยตรงไปยัง การเขียนเชิงวิทยาศาสตร์.
วิธีที่ใช้กันทั่วไปในการดำเนินการนี้ได้รับการมาตรฐานด้วย IEEE 754 และได้รับการยอมรับในระดับสากลตั้งแต่นั้นมา.
โดยทั่วไปแล้ว ค่าแบบทศนิยมประกอบด้วยส่วนประกอบดังต่อไปนี้:
สัญญาณ (0 หรือ 1 ) |
เลขชี้กำลัง | มันทิส |
while สัญญาณสามารถนำมาซึ่งข้อมูลแบบไบนารีแบบใช่/ไม่ใช่ได้ง่าย ส่วนจำนวนที่แท้จริงจะถูกสร้างขึ้นผ่านสมการ
มันทิส * 2เลขชี้กำลัง
เพิ่มเติมยังมีค่าคงที่ บางอย่าง ที่ครอบคลุมกรณีพิเศษของ จำนวนเชิงอัตราส่วน - รวมถึง ±∞
และ NaN
("ไม่มีจำนวนที่ถูกต้อง").
ค่าแบบทศนิยมมีความเป็นประโยชน์โดยเฉพาะเมื่อ ความถูกต้องไม่สำคัญมากนัก เนื่องจากประเภทของค่าดังกล่าวจะมีข้อผิดพลาดในการปัดเศษและสูญเสียความถูกต้องเกิดขึ้นโดยไม่หลีกเลี่ยง. โดยทั่วไปแล้ว ค่าแบบทศนิยมจะถูกใช้ในการกำหนดพิกัด เช่น เวกเตอร์ยอดในโมเดล 3D หรือเส้นโค้ง Bézier/Spline สำหรับวัตถุประสงค์ในการแสดงผลทางสายตา.
ในรูปแบบข้อมูล ค่าแบบทศนิยมจะถูกระบุเป็น float(มันทิส, เลขชี้กำลัง)
.
หากใช้รูปแบบที่แตกต่างจาก IEEE 754 จะมีการระบุอย่างเหมาะสม.