อะไรคืออะไร? · bei.pm

ข้อความนี้ได้รับการแปลโดยอัตโนมัติผ่าน OpenAI GPT-4o Mini

ในหมวดหมู่นี้มีบทความเกี่ยวกับรูปแบบไฟล์และการวิศวกรรมย้อนกลับ

ตอนนี้มันเป็นเช่นนี้:
มีภาษาการเขียนโปรแกรมมากมายและผู้คนมากมายที่รู้จักบางสิ่งภายใต้ชื่อที่แตกต่างกันอย่างสิ้นเชิง - หรือแม้แต่ไม่มีความคิดเกี่ยวกับการมีอยู่ของสิ่งพื้นฐานที่สุดเพราะภาษาการเขียนโปรแกรมของพวกเขาได้ทำให้สิ่งนั้นถูกแยกออกไป

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 + 126127 ดังนั้นในการแปลงเป็นรูปแบบทศนิยม ค่าหลังจุดทศนิยมจะต้องหารด้วย 128.
ด้วยวิธีนี้การดำเนินการคำนวณจะทำได้ง่ายขึ้น เนื่องจากการโอนจะเกิดขึ้นโดยอัตโนมัติ ทำให้วิธีนี้มักถูก เลือกใช้.
อย่างไรก็ตาม วิธีนี้มีข้อเสียตรงที่ตำแหน่งหลังจุดทศนิยมในรูปแบบทศนิยมจะไม่มีการรับประกันความละเอียดอีกต่อไป โดยที่ตำแหน่งทศนิยมเดียวจะไม่ได้มีค่าเท่ากับ 0.01 แต่จะมีค่าเป็น 0.007874 ซึ่งจะนำไปสู่อาการผิดพลาดในการปัดเศษ

วิธีการตีความที่ใช้จะถูกบันทึกไว้ตามจุดที่ใช้.

ค่าแบบเลขทศนิยม

ค่าแบบทศนิยม เป็นนิพจน์ทางคณิตศาสตร์ที่ซับซ้อนกว่า ซึ่งแสดงจำนวนเต็มที่มีความละเอียดคงที่ผ่านคำสั่งทางคณิตศาสตร์ในลักษณะที่สร้างส่วนทศนิยมขึ้นโดยการเลื่อน - และจึงมีการอ้างอิงโดยตรงไปยัง การเขียนเชิงวิทยาศาสตร์.
วิธีที่ใช้กันทั่วไปในการดำเนินการนี้ได้รับการมาตรฐานด้วย IEEE 754 และได้รับการยอมรับในระดับสากลตั้งแต่นั้นมา.

โดยทั่วไปแล้ว ค่าแบบทศนิยมประกอบด้วยส่วนประกอบดังต่อไปนี้:

สัญญาณ (0 หรือ 1) เลขชี้กำลัง มันทิส

while สัญญาณสามารถนำมาซึ่งข้อมูลแบบไบนารีแบบใช่/ไม่ใช่ได้ง่าย ส่วนจำนวนที่แท้จริงจะถูกสร้างขึ้นผ่านสมการ
มันทิส * 2เลขชี้กำลัง

เพิ่มเติมยังมีค่าคงที่ บางอย่าง ที่ครอบคลุมกรณีพิเศษของ จำนวนเชิงอัตราส่วน - รวมถึง ±∞ และ NaN ("ไม่มีจำนวนที่ถูกต้อง").

ค่าแบบทศนิยมมีความเป็นประโยชน์โดยเฉพาะเมื่อ ความถูกต้องไม่สำคัญมากนัก เนื่องจากประเภทของค่าดังกล่าวจะมีข้อผิดพลาดในการปัดเศษและสูญเสียความถูกต้องเกิดขึ้นโดยไม่หลีกเลี่ยง. โดยทั่วไปแล้ว ค่าแบบทศนิยมจะถูกใช้ในการกำหนดพิกัด เช่น เวกเตอร์ยอดในโมเดล 3D หรือเส้นโค้ง Bézier/Spline สำหรับวัตถุประสงค์ในการแสดงผลทางสายตา.

ในรูปแบบข้อมูล ค่าแบบทศนิยมจะถูกระบุเป็น float(มันทิส, เลขชี้กำลัง).
หากใช้รูปแบบที่แตกต่างจาก IEEE 754 จะมีการระบุอย่างเหมาะสม.