The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.
VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.
ประเภทที่เก็บตัวเลขที่มีตำแหน่งทศนิยม - ทศนิยม, สองเท่า
ชนิดข้อมูลเหล่านี้มักเรียกว่าชนิดข้อมูลจุดลอยตัว ตัวเลขดังกล่าวเรียกว่า จำนวนจุดลอยตัว
ลอย fvar = 50.15; ดวาร์สองเท่า = 50.0;
เปรียบเทียบประเภทข้อมูลทศนิยม - ทศนิยมและสองเท่า
ความแตกต่างระหว่างชนิดข้อมูล float และ double นั้นเกี่ยวกับความแม่นยำของจำนวนตำแหน่งทศนิยม
ตามข้อกำหนด VexOS - ARM 7, float สามารถรองรับ 6 หรือ 7 ตำแหน่ง และ double สามารถรองรับ 15 หรือ 16
float: ใน V5os ปัจจุบัน คอนโทรลเลอร์ดูเหมือนว่าจะมีทศนิยมสูงสุด 8 ตำแหน่ง
เช่น
ลอย fvar1 = 1.12345670; ลอย fvar2 = 1.12345678;
fval1 แตกต่างจาก fvar2
เทียบกับ
ลอย fvar1 = 1.123456780; ลอย fvar2 = 1.123456781;
fval1 จะถูกประเมินเหมือนกับ fvar2
คู่: อนุญาตให้มีความแม่นยำถึงทศนิยมสูงสุด 17 ตำแหน่ง
เช่น
สองเท่า dvar1 = 1.12345678912345678; สองเท่า dvar2 = 1.12345678912345670;
dval1 แตกต่างจาก dvar2
เทียบกับ
dvar1 สองเท่า = 1.123456789123456789; สองเท่า dvar2 = 1.123456789123456780;
dval1 จะถูกประเมินเช่นเดียวกับ dvar2
อย่าใช้ "สองเท่า" เว้นแต่ว่าคุณต้องการความแม่นยำสูง
มีเหตุผลสองประการที่คุณไม่ควรใช้ "double" เว้นแต่ว่าคุณต้องการความแม่นยำสูง:
- ใช้ประเภทโฟลต 2X
- มันใช้พลังการประมวลผลที่สูงกว่ามาก
ตามข้อกำหนด VexOS – ARM 7โฟลตสามารถทำได้ 6 หรือ 7 ตำแหน่ง และดับเบิ้ลสามารถรองรับ 15 หรือ 16 ไม่ว่าในกรณีใด คุณไม่ควรพึ่งพาความถูกต้องของตัวเลขหลักสุดท้ายแบบเลขคู่หรือเลขทศนิยม มันถูกจัดเก็บแตกต่างอย่างมากจากการจัดเก็บ "int" เนื่องจากสิ่งที่เรียกว่า "การคำนวณจุดลอยตัว" (ซึ่งอยู่นอกขอบเขตของบทความนี้)
ดังนั้นคุณอาจสูญเสียความแม่นยำของทศนิยมสองสามตำแหน่งสุดท้าย
การดำเนินการแบบดับเบิ้ลนั้นค่อนข้างแพงเมื่อเทียบกับโฟลต และสูงกว่า "จำนวนเต็ม" มากเนื่องจากสิ่งที่เรียกว่าการคำนวณจุดลอยตัว
ตามมาตรฐาน IEEE สิ่งต่อไปนี้อยู่ในช่วงที่เชื่อถือได้มากขึ้น
พิมพ์ | ค่าบวกที่น้อยที่สุด | ค่าบวกที่ใหญ่ที่สุด | #ความแม่นยำ |
ลอย | 10 -38 x 1.17549 | 10 38 x 3.40282 | 6 หลัก |
สองเท่า | 10 -308 หรือ 2.22507 | 10 308 x 1.79769 | 15 หลัก |
คุณสามารถแลกเปลี่ยนชนิดข้อมูลดั้งเดิมได้หรือไม่? - การคัดเลือกนักแสดง
สามารถแลกเปลี่ยนชนิดข้อมูลได้ เทคนิคนี้เรียกว่า "การหล่อ" แม้ว่าการคัดเลือกนักแสดงจะเป็นเรื่องปกติ แต่ให้ทำแบบนั้นเมื่อจำเป็นเท่านั้น
วิธีปฏิบัติที่พบบ่อยที่สุดประการหนึ่งคือการแลกเปลี่ยนถ่านและ int
เนื่องจากทั้งสองแสดงค่าจำนวนเต็มโดยมีข้อยกเว้นประการเดียว:
- “int” มี 4 ไบต์ (หรือ 8 ไบต์ในคอมไพเลอร์บางตัว)
- “char” มีเพียง 1 ไบต์
ดังนั้นเช่น
ถ่าน aVal = 100; int iVal = aVal; // การหล่อโดยนัย
หรือ
int iVal = (ถ่าน) aVal; //การคัดเลือกนักแสดงที่ชัดเจน
ข้อควรระวังในการตัดทอนโดยนัย:
เช่น
แนวทางปฏิบัติทั่วไปอีกประการหนึ่งคือการแลกเปลี่ยน int และ float
ลอย fVal = 5.486; เศษส่วนลอย = fVal - (int) fVal; // ทำได้: 5.486 - 5
ข้อควรระวังในการตัดทอนโดยนัย:
เช่น
int iVal = 50; โฟลต fVal = iVal / 100;
ตอนนี้ fVal = 0.0 ไม่ใช่ 0.5
เป็นการดีอย่างยิ่งที่จะใช้ประโยชน์จากการตัดทอนโดยนัย ซึ่งมักจะเป็นส่วนสำคัญของการดำเนินการในบางสถานการณ์ อย่างไรก็ตาม คุณต้องแน่ใจว่าคุณใช้เทคนิคนี้ตามการออกแบบ
หากคุณไม่ต้องการให้มีการตัดทอนโดยนัย คุณต้องดำเนินการคัดเลือกอย่างชัดเจน:
- การหล่อโดยนัย:
float fVal = iVal / 100.0;
- การคัดเลือกนักแสดงที่ชัดเจน:
float fVal = (float) iVal / 100