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.
الأنواع التي تحتوي على أرقام ذات أماكن عشرية - float، double
غالبًا ما تسمى أنواع البيانات هذه بأنواع بيانات الفاصلة العائمة. تتم الإشارة إلى الأرقام كأرقام الفاصلة العائمة .
تعويم ففار = 50.15؛
دفار مزدوج = 50.0؛
مقارنة أنواع البيانات ذات النقطة العائمة - float و double
يتعلق الاختلاف بين نوع البيانات العائمة والمزدوجة بالدقة في عدد المنازل العشرية.
استنادًا إلى مواصفات VexOS – ARM 7، يمكن لـ float التعامل مع 6 أو 7 خانات، ويمكن لـ double التعامل مع 15 أو 16 خانة.
float: في نظام التشغيل V5os الحالي، يبدو أن وحدة التحكم تسمح بما يصل إلى 8 منازل عشرية من الدقة.
على سبيل المثال
float fvar1 = 1.12345670;
float fvar2 = 1.12345678;
fval1 يختلف عن fvar2
ضد
float fvar1 = 1.123456780;
float fvar2 = 1.123456781;
سيتم تقييم fval1 بنفس تقييم fvar2.
مزدوج: يسمح بما يصل إلى 17 منزلة عشرية من الدقة.
على سبيل المثال
double dvar1 = 1.12345678912345678;
double dvar2 = 1.12345678912345670;
يختلف dval1 عن dvar2،
ضد
double dvar1 = 1.123456789123456789;
double dvar2 = 1.123456789123456780;
سيتم تقييم dval1 بنفس تقييم dvar2.
لا تستخدم "double" إلا إذا كنت بحاجة إلى دقة عالية
هناك سببان يمنعانك من استخدام "مزدوج" إلا إذا كنت بحاجة إلى دقة عالية:
- يستغرق الأمر 2X من النوع العائم.
- يستغرق قوة معالجة أعلى بكثير.
استنادًا إلى مواصفات VexOS – ARM 7، يمكن لـ float أن يقوم بـ 6 أو 7 خانات، ويمكن لـ double التعامل مع 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 رقماً |
هل يمكنك تبادل أنواع البيانات البدائية؟ - الصب
من الممكن تبادل أنواع البيانات. هذه التقنية تسمى "الصب". على الرغم من أن الإلقاء هو ممارسة شائعة إلى حد ما، فلا تفعل ذلك إلا إذا كان ذلك ضروريًا.
أحد الممارسات الأكثر شيوعًا هو تبادل char و int.
وذلك لأن كلاهما يمثل قيمًا صحيحة مع استثناء واحد:
- يحتوي "int" على 4 بايت (أو 8 بايت في بعض المترجمات)
- يحتوي "char" على بايت واحد فقط.
لذلك، على سبيل المثال
شار أفال = 100؛
int iVal = aVal; // صب ضمني
أو
int iVal = (char) aVal; // تحويل صريح.
الحذر من الاقتطاع الضمني:
على سبيل المثال
#include "vex.h"
using namespace vex;
int main() {
// تهيئة إعدادات الروبوت. ممنوع الإزالة!
vexcodeInit();
إنت آي فال = 128؛
شار أفال = (شار) آيفال؛ // سيء!!! لا يمكن لـ aVal استيعاب سوى ما بين -128 و 127.
}ممارسة شائعة أخرى هي تبادل int و float
تعويم fVal = 5.486؛
جزء عائم = fVal - (int)fVal; // يفعل: 5.486 - 5
الحذر من الاقتطاع الضمني:
على سبيل المثال
إنت آي فال = 50؛
تعويم fVal = iVal / 100؛
الآن fVal = 0.0، وليس 0.5.
من الجيد تمامًا الاستفادة من الاقتطاع الضمني، والذي غالبًا ما يكون جزءًا مهمًا من العمليات في بعض السيناريوهات. ومع ذلك، تحتاج إلى التأكد من أنك تستخدم هذه التقنية حسب التصميم.
إذا كنت لا ترغب في حدوث الاقتطاع الضمني، فأنت بحاجة إلى إجراء عملية تحويل صريحة:
- الصب الضمني:
float fVal = iVal / 100.0؛ - صب صريح:
float fVal = (float) iVal / 100