تخزين الأعداد الحقيقية في الحاسوب (الدقة العادية والمضاعفة)
المقدمة
تخزين الأعداد الحقيقية في الحاسوب يتم باستخدام نظام الفاصلة العائمة (Floating-Point) وفق المعيار العالمي IEEE 754. هذا الدرس يشرح بالتفصيل:
- تمثيل الأعداد بدقة عادية (32 بت)
- تمثيل الأعداد بدقة مضاعفة (64 بت)
- الفروقات بينهما
- مشاكل الدقة والخطأ التقريبي
1. المعيار IEEE 754 (نظرة عامة)
يحدد هذا المعيار طريقتين رئيسيتين:
- الدقة العادية (Single Precision): 32 بت
- الدقة المضاعفة (Double Precision): 64 بت
مكونات التمثيل:
المكون | الدقة العادية (32 بت) | الدقة المضاعفة (64 بت) |
---|---|---|
بت الإشارة (S) | 1 بت | 1 بت |
الأس (Exponent) | 8 بت | 11 بت |
الجزء الكسري (Mantissa) | 23 بت | 52 بت |
التحيز (Bias) | 127 | 1023 |
2. تمثيل الدقة العادية (32 بت)
البنية:
S (1 بت) | Exponent (8 بت) | Mantissa (23 بت)
طريقة الحساب:
القيمة = (-1)S × 1.M × 2E - 127
مثال تطبيقي:
مثل العدد -13.75 بدقة عادية.
الحل:
- الإشارة (S): 1 (لأن العدد سالب)
- التحويل إلى ثنائي:
- الجزء الصحيح: 1310 = 11012
- الجزء الكسري: 0.7510 = 0.112
- العدد الكامل: 13.7510 = 1101.112
- التطبيع (Normalization):
- 1101.112 = 1.10111 × 23
- الأس (Exponent):
- E = 3 + 127 = 13010 = 100000102
- الجزء الكسري (Mantissa):
- M = 101110000000000000000002
- التمثيل النهائي:
- 1 10000010 101110000000000000000002
3. تمثيل الدقة المضاعفة (64 بت)
البنية:
S (1 بت) | Exponent (11 بت) | Mantissa (52 بت)
طريقة الحساب:
القيمة = (-1)S × 1.M × 2E - 1023
مثال تطبيقي:
مثل العدد 0.15625 بدقة مضاعفة.
الحل:
- الإشارة (S): 0 (موجب)
- التحويل إلى ثنائي:
- 0.15625 × 2 = 0.3125 (خذ 0)
- 0.3125 × 2 = 0.625 (خذ 0)
- 0.625 × 2 = 1.25 (خذ 1)
- 0.25 × 2 = 0.5 (خذ 0)
- 0.5 × 2 = 1.0 (خذ 1)
- 0.1562510 = 0.001012
- التطبيع:
- 0.001012 = 1.01 × 2-3
- الأس:
- E = -3 + 1023 = 102010 = 011111111002
- الجزء الكسري:
- M = 01000000000000000000000000000000000000000000000000002
- التمثيل النهائي:
- 0 01111111100 01000000000000000000000000000000000000000000000000002
4. مقارنة بين الدقة العادية والمضاعفة
المعيار | الدقة العادية (32 بت) | الدقة المضاعفة (64 بت) |
---|---|---|
النطاق التقريبي | ±10±38 | ±10±308 |
الدقة العشرية | ~7 أرقام | ~15 رقم |
استهلاك الذاكرة | 4 بايت | 8 بايت |
الاستخدام الشائع | رسوميات، ألعاب | حسابات علمية، مالية |
مثال على القيم الخاصة | NaN, Infinity | دقة أعلى في الحسابات |
5. مشاكل الدقة والخطأ التقريبي
5.1. الأخطاء الشائعة
- خطأ التقريب (Rounding Error):
- مثال: 0.1 + 0.2 ≠ 0.3 في الحاسوب!
- السبب: لا يمكن تمثيل 0.1 بدقة في النظام الثنائي.
- الانزياح (Cancellation):
- عند طرح عددين متقاربين جدًا، تفقد الدقة.
5.2. كيفية تجنب المشاكل
- استخدم الدقة المضاعفة للحسابات الحساسة.
- تجنب المقارنات المباشرة بين أعداد浮点数 (استخدم هامش خطأ مسموح به).
6. تمارين تطبيقية
التمرين 1: التحويل إلى Single Precision
حول العدد 7.3 إلى تمثيل 32 بت.
تلميح: 0.3 في الثنائي دوري!
التمرين 2: قراءة تمثيل Double Precision
فسر التمثيل التالي:
0 10000000010 110000000000000...00002 (52 بت للجزء الكسري)
التمرين 3: حساب الخطأ التقريبي
احسب الفرق بين (0.1 + 0.2) - 0.3 في Python أو أي لغة برمجة، وناقش النتيجة.
الخاتمة
الدقة العادية (32 بت) كافية لمعظم التطبيقات العادية.
الدقة المضاعفة (64 بت) ضرورية للحسابات العلمية الدقيقة.
فهم تمثيل Floating-Point يساعد في تجنب الأخطاء البرمجية الشائعة.
جرب بنفسك: استخدم محول IEEE 754 أونلاين للتحقق من تمارينك!
ملحق: قيم خاصة في IEEE 754
القيمة | الأس | الجزء الكسري |
---|---|---|
صفر | 000...0 | 000...0 |
ما لا نهاية (∞) | 111...1 | 000...0 |
NaN (Not a Number) | 111...1 | غير صفر |