طريقة الاستخدام
- اختر الصيغة: نصف الدقة أو المفردة أو المزدوجة.
- تحت أدخل، اختر عدداً عشرياً لتحويل عدد، أو نمط بتات (سداسي عشري) لقراءة بتات مخزنة.
- اكتب القيمة في القيمة. تتحدّث الصفحة أثناء كتابتك.
- اقرأ البتات الملونة وجدول الحقل وجدول النتيجة. ويظهر خطأ التقريب لعدد عشري فقط.
كيف يُقسَم العدد إلى حقول
يتكون العدد ذو الفاصلة العائمة الثنائي من ثلاثة حقول: بت الإشارة، وحقل الأس، وحقل الكسر. تستخدم الدقة المفردة 1 و8 و23 بتاً، والمزدوجة 1 و11 و52، ونصف الدقة 1 و5 و10. وبالنسبة للعدد الطبيعي تكون القيمة (−1)^الإشارة × (1 + الكسر) × 2^(حقل الأس − الانحياز)، حيث الانحياز 127 للدقة المفردة (يعرّف IEEE 754 الحقول في صيغه الثنائية).
0.15625 = 1.25 × 2^−3 → الإشارة 0، الأس 127 − 3 = 124 = 01111100، الكسر 0100… → 0 01111100 01000000000000000000000 = 3E200000
التقريب إلى أقرب قيمة
معظم الأعداد العشرية لا يمكن تخزينها بدقة بالنظام الثنائي. تقرّب الصفحة العدد المكتوب إلى أقرب قيمة تستطيع الصيغة تخزينها، وعند التعادل تذهب إلى القيمة التي يكون بتها الأخير زوجياً. والمسافة بين قيمتين متجاورتين هي ulp (وحدة في آخر خانة)، وخطأ التقريب لا يتجاوز نصف ulp. فالعدد 0.1 بدقة مفردة يُخزَّن كـ 0.100000001490116119384765625، لذلك يكون الخطأ +1.49 × 10^-9، أي 0.2 ulp.
القيم الخاصة
- الصفر: أس وكسر أصفار. تُحفظ بته للإشارة، فالصفر السالب و+0 نمطان مختلفان.
- الأعداد دون الطبيعية: حقل أس أصفار دون بت مخفٍ. وهي تملأ الفراغ بين الصفر وأصغر عدد طبيعي.
- اللانهاية: أس كله واحدات وكسر أصفار. والعدد العشري الذي يتقرّب فوق أكبر عدد محدود يصبح لانهاية.
- NaN: أس كله واحدات، وكسر ليس صفراً. يفصل البت الأعلى في الكسر بين NaN الصامت والإشاري، وما بقي من الكسر هو الحمولة.
ما الذي لا تغطيه الصفحة
- الحساب: تعرض الصفحة كيف يُخزَّن العدد، لا نتيجة جمع عددين مخزنين أو ضربهما.
- الأعداد العشرية في IEEE 754-2008 التي تستخدم الأساس 10، وصيغ أخرى مثل bfloat16 أو الأعداد ذات 8 بتات.
- الأعداد الصحيحة بالمكمل الثنائي: انظر حاسبة المكمل الثنائي.
مثال محلول: 0.1 بدقة مفردة
اكتب 0.1 مع الصيغة مضبوطة على الدقة المفردة. العدد 0.1 هو 1.6 × 2^−4، والمعامل 1.6 لا يمكن كتابته ببت كسر من 23 بتاً. يُقرَّب الكسر إلى الأعلى، فتكون القيمة المخزنة أكبر قليلاً من 0.1.
| النتيجة | القيمة |
|---|---|
| السداسي العشري | 3DCCCCCD |
| القيمة المخزنة بالضبط | 0.100000001490116119384765625 |
| خطأ التقريب (المخزن ناقص المكتوب) | +1.490116119384765625e-9 |
| خطأ التقريب بوحدات ulp | +0.200 |
الأسئلة الشائعة
لماذا لا يساوي 0.1 + 0.2 العدد 0.3 تماماً في الحاسوب؟
لا يمكن تخزين 0.1 ولا 0.2 بدقة بالنظام الثنائي، ثم يُقرَّب مجموعهما مرة أخرى. وفي الدقة المزدوجة يعطي 0.1 + 0.2 القيمة 0.30000000000000004، وهي القيمة التي تقع فوق 0.3 المخزن مباشرة.
ما الفرق بين القيمة المخزنة بالضبط والعدد المكتوب؟
العدد المكتوب هو العدد العشري الذي كتبته. والقيمة المخزنة بالضبط هي العدد الثنائي الذي تحفظه الصيغة فعلاً، مكتوباً كاملاً. وخطأ التقريب هو الفرق بينهما، فترى مدى البعد بين الاثنين.
ماذا تعني ulp؟
ulp هي وحدة في آخر خانة: الفرق بين قيمة مخزنة والقيمة التالية لها في النطاق نفسه. والتقريب إلى أقرب قيمة لا يبعد أكثر من نصف ulp، وتعرض الصفحة الخطأ عدداً وبوحدات ulp معاً.
لماذا يصبح 1e39 لانهاية في الدقة المفردة؟
أكبر قيمة بالدقة المفردة تقارب 3.4028235 × 10^38. والعدد الذي يتقرّب فوقها لا يملك قيمة محدودة مخزنة، لذلك تستخدم الصيغة اللانهاية، وتعلّم الصفحة النتيجة بأنها كبيرة جداً.
هل يستطيع NaN أن يحفظ معلومات؟
نعم. بتات الكسر في NaN لا تُستخدم في قيمته، فيستطيع البرنامج أن يخزّن فيها حمولة. تعرض الصفحة كسر NaN حمولةً، وتبيّن إن كان صامتاً أو إشارياً.
المصادر
- IEEE 754 (باللغة الإنجليزية): IEEE Standards Association
- Wikipedia (باللغة الإنجليزية): IEEE 754
- Wikipedia (باللغة الإنجليزية): Single-precision floating-point format
- Wikipedia (باللغة الإنجليزية): Double-precision floating-point format
- Wikipedia (باللغة الإنجليزية): Half-precision floating-point format
آخر مراجعة للأرقام والنص: الأربعاء، 1 جمادى الآخرة 1448 بعد الهجرة.