الأنواع التي تحتوي على أرقام ذات منازل عشرية - عائمة ، ومضاعفة
غالبًا ما تسمى أنواع البيانات هذه أنواع بيانات النقطة العائمة. تتم الإشارة إلى الأرقام على أنها نقطة عائمة أرقام.
تعويم fvar = 50.15 ؛ مزدوج dvar = 50.0؛
قارن نوع بيانات الفاصلة العائمة - عائم ومزدوج
يكمن الاختلاف بين نوع البيانات العائم والمزدوج في الدقة في # من المنازل العشرية.
استنادًا إلى VexOS - مواصفات ARM 7، يمكن للطفو التعامل مع 6 أو 7 أماكن ، ويمكن للمزدوج التعامل مع 15 أو 16 .
عائم: في 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 رقمًا |
هل يمكنك تبادل أنواع البيانات البدائية؟ - يصب
من الممكن تبادل أنواع البيانات. هذه التقنية تسمى "Casting". بينما يعد اختيار الممثلين ممارسة شائعة إلى حد ما ، لا تفعل ذلك إلا إذا كان ذلك ضروريًا.
من أكثر الممارسات شيوعًا تبادل char و int.
هذا لأن كلاهما يمثل قيمًا صحيحة مع استثناء واحد:
- يحتوي "int" على 4 بايت (أو 8 بايت في بعض المترجم)
- يحتوي "char" على 1 بايت فقط.
لذلك ، على سبيل المثال
شار aVal = 100 ؛ int iVal = aVal؛ // الصب الضمني
أو
int iVal = (char) 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؛
- إرسال صريح:
عائم fVal = (عائم) iVal / 100