إنشاء المتغيرات العائمة والمزدوجة في VEXcode Pro V5

الأنواع التي تحتوي على أرقام ذات منازل عشرية - عائمة ومزدوجة

غالبًا ما تسمى أنواع البيانات هذه بأنواع بيانات الفاصلة العائمة. تتم الإشارة إلى الأرقام كأرقام الفاصلة العائمة .

تعويم ففار = 50.15؛
دفار مزدوج = 50.0;

قارن بين نوع البيانات ذات الفاصلة العائمة - العائمة والمزدوجة

يتعلق الاختلاف بين نوع البيانات العائمة والمزدوجة بالدقة في عدد المنازل العشرية.

بناءً على مواصفات VexOS – ARM 7، يمكن للطفو التعامل مع 6 أو 7 أماكن، ويمكن للمزدوج التعامل مع 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.


لا تستخدم "مزدوج" إلا إذا كنت بحاجة إلى دقة عالية

هناك سببان يمنعانك من استخدام "مزدوج" إلا إذا كنت بحاجة إلى دقة عالية:

  1. يستغرق الأمر 2X من النوع العائم.
  2. يستغرق قوة معالجة أعلى بكثير.

بناءً على مواصفات VexOS – ARM 7، يمكن للطفو أن يقوم بـ 6 أو 7 أماكن، ويمكن للدوبل التعامل مع 15 أو 16 مكانًا. وفي كلتا الحالتين، يجب ألا تعتمد على دقة الأرقام الأخيرة المزدوجة أو العائمة. يتم تخزينه بشكل مختلف تمامًا عن تخزين "int" نظرًا لما يسمى "حساب النقطة العائمة" (وهو خارج نطاق هذه المقالة).

وبالتالي، قد تفقد الدقة في المنازل العشرية القليلة الأخيرة.

تعتبر العملية على المضاعفة مكلفة للغاية مقارنة بالعملية العائمة، وهي أعلى بكثير من "العدد الصحيح" بسبب ما يسمى بحسابات الفاصلة العائمة.

استنادًا إلى معيار IEEE، يقع ما يلي ضمن نطاق أكثر موثوقية.

يكتب أصغر قيمة إيجابية أكبر قيمة إيجابية # الدقة
يطفو 10 -38 × 1.17549 10 38 × 3.40282 6 أرقام
مزدوج 10 -308 أو 2.22507 10 308 × 1.79769 15 رقما

هل يمكنك تبادل أنواع البيانات البدائية؟ - يصب

من الممكن تبادل أنواع البيانات. هذه التقنية تسمى "الصب". على الرغم من أن الإلقاء هو ممارسة شائعة إلى حد ما، فلا تفعل ذلك إلا إذا كان ذلك ضروريًا. 

إحدى الممارسات الأكثر شيوعًا هي تبادل char و int.

وذلك لأن كلاهما يمثل قيمًا صحيحة مع استثناء واحد: 

  • يحتوي "int" على 4 بايت (أو 8 بايت في بعض المترجمات)
  • يحتوي "char" على بايت واحد فقط.

لذلك، على سبيل المثال

شار أفال = 100؛
int iVal = aVal; // صب ضمني

أو

int iVal = (char) aVal; // صب صريح.

الحذر من الاقتطاع الضمني:

على سبيل المثال

codesnippet3.png

ممارسة شائعة أخرى هي تبادل 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

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

Last Updated: