การสร้างตัวแปร Float และ Double ใน VEXcode Pro V5

ประเภทที่เก็บตัวเลขที่มีตำแหน่งทศนิยม - ทศนิยม, สองเท่า

ชนิดข้อมูลเหล่านี้มักเรียกว่าชนิดข้อมูลจุดลอยตัว ตัวเลขดังกล่าวเรียกว่า จำนวนจุดลอยตัว

ลอย 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" เว้นแต่ว่าคุณต้องการความแม่นยำสูง:

  1. ใช้ประเภทโฟลต 2X
  2. มันใช้พลังการประมวลผลที่สูงกว่ามาก

ตามข้อกำหนด 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; //การคัดเลือกนักแสดงที่ชัดเจน

ข้อควรระวังในการตัดทอนโดยนัย:

เช่น

codesnippet3.png

แนวทางปฏิบัติทั่วไปอีกประการหนึ่งคือการแลกเปลี่ยน 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

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: