المتابعون للمدونة

الثلاثاء، 28 فبراير 2017

دقة تمثيل الأعداد العشرية


دقة تمثيل الأعداد العشرية Decimal Precision:

تعرفنا حتى الآن على أربعة أنواع مختلفة من البيانات:
1- بيانات منطقية: والنوع الوحيد الذي يمثلها هو Boolean.
2- حروف ونصوص: ويمثلها النوعان Char و String بالترتيب.
3- أعداد صحيحة لا تحتوي على أجزاء عشرية: وتمثلها الأنواع Byte و Short و Integer و Long.. والفرق بين كل نوع وآخر من هذه الأنواع، هو في نطاق الأعداد التي يمكن حفظها فيها، فلو كنت تتعامل مع الأعداد الأصغر من 255 فاستخدم النوع Byte لتوفير مساحة الذاكرة.. ويعتبر النوع Integer أشهر الأنواع وأكثرها استخداما، بسبب سرعة وكفاءة حفظه في الذاكرة وقراءته منها، ما يجعل البرنامج أسرع.. لهذا يستخدمه المبرمجون في الغالب للتعامل مع الأعداد الصحيحة في البرنامج.. أما النوع Long فيستخدم عند التعامل مع حسابات تعطي أرقاما ضخمة جدا لا يمكن حفظها في النوع Integer.
4- أعداد عشرية، بها جزء صحيح وجزء عشري: وتمثلها الأنواع Single 
و
Double و Decimal.. والجدول التالي يقارن بين هذه الأنواع الثلاثة: 

النوع
عدد الوحدات
أقصى دقة عشرية
Single
4 Bytes
7 خانات عشرية
Double
8 Bytes
15 خانة عشرية
Decimal
16 Bytes
29 خانة عشرية
 
ويقصد بالدقة العشرية، عدد الأرقام التي يمكن عرضها في العدد (سواء على يمين العلامة العشرية أو يسارها) بدون إجراء أي تقريب.
بناء على هذا الجدول، لو كان لديك العدد 1.35 فيمكنك تخزينه في الذاكرة كعدد مفرد Single، لأنه يحتوي على 3 أرقام فقط، والعدد المفرد يستوعب أعدادا تحتوي على 7 أرقام كحد أقصى، ولو زادت الخانات العشرية عن هذا، فسيتم تقريبها، ولو زادت الأعداد الصحيحة عن هذا، فسيتم استخدام الأسس العشرية، وفي كلتا الحالتين يفقد العدد جزءا من دقته.. لهذا لو كانت الدقة مهمة ولا تريد فقدها، فعليك استخدام المتغير المزدوج Double للتعامل مع الأعداد التي تحتوي على أكثر من 7 أرقام.
مثلا: لو كان لديك العدد 1.35000081، فعليك حفظه في الذاكرة كعدد مزدوج Double، لأنه يتكون من 9 أرقام (ثماني خانات عشرية وخانة صحيحة واحدة)، والعدد المزدوج يستوعب حتى 15 خانة.
أما لو كان العدد الذي تتعامل معه يتكون من أكثر من 15 رقما، فعليك استخدام العدد العشري Decimal.
افترض أننا عرفنا متغيرا مفردا كالتالي:
Dim S As Single
الجدول التالي يوضح لك كيف ستتأثر الدقة العشرية تبعا للأعداد المختلفة التي سنضعها في هذا العدد، مع ملاحظة تأثير عمليات التقريب على شكل الناتج الذي ستعرضه الرسالة عند استخدام الجملة:
MsgBox(S) 

العدد الذي سنضعه في المتغير
الناتج الذي ستعرضه الرسالة
0.12345678
0.1234568
1.12345678
1.123457
21.12345678
21.12346
321.12345678
321.1235
4321.12345678
4321.123
54321.12345678
54321.12
654321.12345678
654321.1
7654321.12345678
7654321

هذا الجدول يوضح لك أن العدد المفرد يحتوي دائما على 7 أرقام كحد أقصى، حتى لو كان هذا على حساب ضياع بعض الخانات العشرية.. لهذا لا يصلح العدد المفرد لتمثيل الأعداد العشرية التي تحتوي على جزء صحيح كبير أو جزء عشري كبير، لأنك قد تفقد جزءا من الدقة العشرية أو تفقدها تماما، ما يؤثر على ناتج أية عمليات حسابية تجريها.. بينما لو عرفنا متغيرا مزدوجا، واستخدمناه لحفظ الأعداد الموضحة في الجدول السابق، فسنحصل على دقة عشرية تامة في كل الحالات، وبدون أي تقريب.. جرب مثلا:
Dim D As Double = 7654321.12345678
MsgBox(D)
ستعرض الرسالة العدد 7654321.12345678 كاملا بدون أي تقريب، لأنه يتكون من 15 رقما.. لكن لو جربت أي عدد يتكون من عدد أكبر من الأرقام فسيتم تقريبه.. مثال:
Dim D As Double = 87654321.12345678
MsgBox(D)
ستعرض الرسالة العدد 7654321.1234568.
لاحظ أن استخدام العدد المزدوج يستهلك في الذاكرة مساحة أكبر من المساحة التي يستهلكها العدد المفرد.. كما أن إجراء العمليات الحسابية على العدد المزدوج يكون أبطأ نسبيا من إجرائها على العدد المفرد، لكن كما رأينا، تكون دقة الناتج عند التعامل مع العدد المزدوج أكبر من دقة الناتج عند التعامل مع العدد المفرد.  

من كتاب المبرمج الصغير للصف الثالث الإعدادي (الفصل الدراسي الثاني).. للتنزيل كاملا:

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر