تنسيق النقطة العائمة بدقة واحدة
تنسيق النقطة العائمة ذات الدقة المفردة (يُطلق عليه أحيانًا FP32 أو float32 ) هو تنسيق أرقام حاسوبي ، يشغل عادةً 32 بتًا في ذاكرة الحاسوب ؛ ويمثل نطاقًا ديناميكيًا واسعًا من القيم الرقمية باستخدام نقطة أساس عائمة .
يمكن أن يمثل متغير الفاصلة العائمة نطاقًا أوسع من الأرقام من متغير الفاصلة الثابتة بنفس عرض البت على حساب الدقة. المتغير الصحيح ذو الـ 32 بت له قيمة قصوى تبلغ 2 31 − 1 = 2,147,483,647، بينما المتغير ذو الفاصلة العائمة ذو الـ 32 بت ذو القاعدة 2 وفقًا لمعيار IEEE 754 له قيمة قصوى تبلغ (2 − 2 −23 ) × 2 127 ≈ 3.4028235 × 10 38 . يمكن تحويل جميع الأعداد الصحيحة التي تحتوي على 7 أرقام عشرية أو أقل، وأي 2 n لعدد صحيح −149 ≤ n ≤ 127، إلى قيمة فاصلة عائمة بدقة واحدة وفقًا لمعيار IEEE 754.
في معيار IEEE 754 ، يُشار رسميًا إلى تنسيق 32 بت الأساسي 2 باسم binary32 ؛ وقد تم تسميته فرديًا في IEEE 754-1985 . يحدد IEEE 754 أنواعًا إضافية من الفاصلة العائمة، مثل الدقة المزدوجة الأساسية 2 64 بت ، ومؤخرًا، التمثيلات الأساسية 10.
كانت لغة Fortran واحدة من أولى لغات البرمجة التي توفر أنواع بيانات ذات فاصلة عائمة بدقة مفردة ومزدوجة . وقبل التبني الواسع النطاق لمعيار IEEE 754-1985، كانت تمثيلات وخصائص أنواع البيانات ذات الفاصلة العائمة تعتمد على الشركة المصنعة للكمبيوتر وطراز الكمبيوتر، وعلى القرارات التي يتخذها مصممو لغة البرمجة. على سبيل المثال، كان نوع البيانات ذات الدقة المفردة في لغة البرمجة GW-BASIC هو تنسيق الفاصلة العائمة MBF ذي 32 بت .
يُطلق على الدقة المفردة اسم REAL في Fortran ؛ [1] وSINGLE-FLOAT في Common Lisp ؛ [2] وfloat في C و C++ و C# و Java ؛ [3] وfloat في Haskell [4] و Swift ؛ [5] و Single في Object Pascal ( Delphi ) و Visual Basic و MATLAB . ومع ذلك، فإن float في Python و Ruby و PHP و OCaml و single في إصدارات Octave قبل 3.2 تشير إلى أرقام ذات دقة مزدوجة . في معظم تطبيقات PostScript وبعض الأنظمة المضمنة ، تكون الدقة المدعومة الوحيدة هي single.
| تنسيقات النقطة العائمة |
|---|
| معهد مهندسي الكهرباء والإلكترونيات 754 |
| آخر |
| Alternatives |
معيار IEEE 754: binary32
يحدد معيار IEEE 754 ملفًا ثنائيًا32 على أنه يحتوي على:
- بت الإشارة : 1 بت
- عرض الأس : 8 بت
- دقة الدلالة : 24 بت (23 مخزنة صراحةً)
وهذا يعطي دقة تتراوح من 6 إلى 9 أرقام عشرية مهمة . إذا تم تحويل سلسلة عشرية تحتوي على 6 أرقام مهمة على الأكثر إلى تنسيق الدقة المفردة IEEE 754، مما يعطي رقمًا عاديًا ، ثم تم تحويلها مرة أخرى إلى سلسلة عشرية بنفس عدد الأرقام، فيجب أن تتطابق النتيجة النهائية مع السلسلة الأصلية. إذا تم تحويل رقم بدقة مفردة IEEE 754 إلى سلسلة عشرية تحتوي على 9 أرقام مهمة على الأقل، ثم تم تحويلها مرة أخرى إلى تمثيل بدقة مفردة، فيجب أن تتطابق النتيجة النهائية مع الرقم الأصلي. [6]
يحدد بت الإشارة إشارة الرقم، والتي هي إشارة الدلالة أيضًا. حقل الأس هو عدد صحيح غير موقّع مكون من 8 بتات من 0 إلى 255، في شكل متحيز : تمثل القيمة 127 الأس الفعلي صفر. تتراوح الأسس من −126 إلى +127 (وبالتالي من 1 إلى 254 في حقل الأس)، لأن قيم الأسس المتحيزة 0 (كلها 0) و255 (كلها 1) محجوزة للأرقام الخاصة ( الأعداد دون الطبيعية ، والأصفار الموقعة ، واللانهائيات ، و NaNs ).
تتضمن الدلالة الحقيقية للأعداد الطبيعية 23 بت كسري إلى يمين النقطة الثنائية وبتًا أوليًا ضمنيًا (إلى يسار النقطة الثنائية) بقيمة 1. يتم تمثيل الأعداد دون الطبيعية والأصفار (وهي أرقام الفاصلة العائمة الأصغر في المقدار من أقل عدد طبيعي موجب) بقيمة الأس المتحيزة 0، مما يعطي البت الأولي الضمني القيمة 0. وبالتالي، تظهر 23 بتًا كسريًا فقط من الدلالة في تنسيق الذاكرة، ولكن الدقة الإجمالية هي 24 بتًا (تعادل log 10 (2 24 ) ≈ 7.225 رقمًا عشريًا).
يتم ترتيب البتات على النحو التالي:
القيمة الحقيقية المفترضة بواسطة بيانات ثنائية 32 بت معطاة بإشارة معينة ، وأس متحيز e (عدد صحيح غير موقّع مكون من 8 بتات)، وكسر مكون من 23 بت هي
- ,
الذي ينتج
في هذا المثال:
- ,
- ,
- ,
- ,
- .
هكذا:
- .
ملحوظة:
- ,
- ,
- ,
- .
ترميز الأس
يتم ترميز الأس العشري الثنائي ذو الدقة الفردية باستخدام تمثيل ثنائي الإزاحة ، حيث يكون الإزاحة الصفرية 127؛ والمعروفة أيضًا باسم تحيز الأس في معيار IEEE 754.
- الحد الأدنى = 01 H −7F H = −126
- الحد الأقصى للطاقة = FE H −7F H = 127
- انحياز الأس = 7F H = 127
وبالتالي، من أجل الحصول على الأس الحقيقي كما هو محدد بواسطة التمثيل الثنائي الإزاحي، يجب طرح الإزاحة 127 من الأس المخزن.
يتم تفسير الأسس المخزنة 00 H وFF H بشكل خاص.
| الأس | الكسر = 0 | الكسر ≠ 0 | معادلة |
|---|---|---|---|
| 00 ح = 00000000 2 | ±صفر | عدد أقل من الطبيعي | |
| 01 ح ، ...، FE ح = 00000001 2 ، ...، 11111110 2 | القيمة الطبيعية | ||
| FF ح = 11111111 2 | ± ما لا نهاية | NaN (هادئ، إشارات) | |
الحد الأدنى للقيمة الطبيعية الإيجابية هو والحد الأدنى للقيمة الإيجابية (دون الطبيعية) هو .
تحويل النظام العشري إلى ثنائي32
This section possibly contains original research. (February 2020) |
This section may be confusing or unclear to readers. In particular, the examples are simple particular cases (simple values exactly representable in binary, without an exponent part). This section is also probably off-topic: this is not an article about conversion, and conversion from decimal using decimal arithmetic (as opposed to conversion from a character string) is uncommon. (February 2020) |
بشكل عام، راجع معيار IEEE 754 نفسه للتحويل الصارم (بما في ذلك سلوك التقريب) لرقم حقيقي إلى تنسيقه الثنائي32 المكافئ.
يمكننا هنا أن نظهر كيفية تحويل عدد حقيقي أساسي 10 إلى تنسيق ثنائي IEEE 75432 باستخدام المخطط التفصيلي التالي:
- لنفترض أن لدينا عددًا حقيقيًا به عدد صحيح وجزء كسري مثل 12.375
- تحويل وتطبيع الجزء الصحيح إلى ثنائي
- قم بتحويل جزء الكسر باستخدام التقنية التالية كما هو موضح هنا
- أضف النتيجتين وقم بتعديلهما لإنتاج تحويل نهائي مناسب
تحويل الجزء الكسري: لنفترض أن 0.375 هو الجزء الكسري من 12.375. لتحويله إلى كسر ثنائي، اضرب الكسر في 2، ثم خذ الجزء الصحيح وكرر العملية مع الكسر الجديد في 2 حتى يتم العثور على كسر يساوي صفرًا أو حتى يتم الوصول إلى حد الدقة وهو 23 رقمًا كسريًا لتنسيق IEEE 754 binary32.
- يمثل الجزء الصحيح رقم الكسر الثنائي. أعد ضرب 0.750 في 2 للمتابعة
- ، الكسر = 0.011، إنهاء
نرى أنه يمكن تمثيله بدقة في النظام الثنائي على النحو التالي . لا يمكن تمثيل جميع الكسور العشرية في كسر ثنائي مكون من رقم محدود. على سبيل المثال، لا يمكن تمثيل العدد العشري 0.1 بدقة في النظام الثنائي، بل يمكن تمثيله تقريبيًا فقط. لذلك:
نظرًا لأن تنسيق IEEE 754 binary32 يتطلب تمثيل القيم الحقيقية بالتنسيق (انظر الرقم الطبيعي ، الرقم غير الطبيعي )، يتم تحويل 1100.011 إلى اليمين بمقدار 3 أرقام ليصبح
وأخيرا يمكننا أن نرى أن:
ومنه نستنتج:
- الأس هو 3 (وفي الشكل المتحيز يكون بالتالي )
- الكسر هو 100011 (بالنظر إلى يمين النقطة الثنائية)
ومن هذه يمكننا تكوين التمثيل الناتج بتنسيق IEEE 754 الثنائي 32 بت لـ 12.375:
ملاحظة: ضع في اعتبارك تحويل 68.123 إلى تنسيق IEEE 754 binary32: باستخدام الإجراء أعلاه، تتوقع الحصول على آخر 4 بتات تساوي 1001. ومع ذلك، نظرًا لسلوك التقريب الافتراضي لتنسيق IEEE 754، فإن ما تحصل عليه هو ، حيث تكون آخر 4 بتات منه تساوي 1010.
المثال 1: لنأخذ العدد العشري 1. يمكننا أن نرى أن:
ومنه نستنتج:
- الأس هو 0 (وفي الشكل المتحيز يكون بالتالي
- الكسر هو 0 (النظر إلى يمين النقطة الثنائية في 1.0 هو كل شيء )
ومن هذه يمكننا تكوين التمثيل الناتج بتنسيق IEEE 754 الثنائي 32 بت للعدد الحقيقي 1:
المثال 2: لنفترض أن القيمة 0.25، يمكننا أن نرى أن:
ومنه نستنتج:
- الأس هو −2 (وفي الشكل المتحيز يكون )
- الكسر هو 0 (بالنظر إلى يمين النقطة الثنائية في 1.0، كل الأصفار موجودة)
ومن هذه يمكننا تكوين التمثيل الناتج بتنسيق IEEE 754 الثنائي 32 بت للعدد الحقيقي 0.25:
المثال 3: لنفترض أن القيمة 0.375. لقد رأينا أن
ومن ثم، بعد تحديد تمثيل 0.375، يمكننا المضي قدمًا كما هو موضح أعلاه:
- الأس هو −2 (وفي الشكل المتحيز يكون )
- الكسر هو 1 (بالنظر إلى يمين النقطة الثنائية في 1.1 هو واحد )
ومن هذه يمكننا تكوين التمثيل الناتج بتنسيق IEEE 754 الثنائي 32 بت للعدد الحقيقي 0.375:
تحويل binary32 إلى عشري
This section possibly contains original research. (February 2020) |
This section may be confusing or unclear to readers. In particular, there is only a very simple example, without rounding. This section is also probably off-topic: this is not an article about conversion, and conversion to decimal, using decimal arithmetic, is uncommon. (February 2020) |
إذا كانت قيمة binary32، 41C80000 في هذا المثال، بالنظام السداسي عشري، فإننا نقوم أولاً بتحويلها إلى نظام ثنائي:
ثم نقسمها إلى ثلاثة أجزاء: بت الإشارة، والأس، والرمز.
- بت التوقيع:
- الأس:
- دلالات:
نضيف بعد ذلك البت الضمني رقم 24 إلى البت ذي الدلالة:
- دلالات:
وفك قيمة الأس عن طريق طرح 127:
- الأس الخام:
- الأس المفكك:
يمثل كل بت من البتات الـ 24 للدلالة (بما في ذلك البت الضمني رقم 24)، من البت 23 إلى البت 0، قيمة، تبدأ من 1 ونصف لكل بت، على النحو التالي:
بت 23 = 1 بت 22 = 0.5 بت 21 = 0.25 بت 20 = 0.125 بت 19 = 0.0625 بت 18 = 0.03125 بت 17 = 0.015625 . . بت 6 = 0.00000762939453125 بت 5 = 0.000003814697265625 بت 4 = 0.0000019073486328125 بت 3 = 0.00000095367431640625 بت 2 = 0.000000476837158203125 بت 1 = 0.0000002384185791015625 بت 0 = 0.00000011920928955078125
في هذا المثال، تم تعيين ثلاثة بتات للدلالة: البت 23، والبت 22، والبت 19. يمكننا الآن فك تشفير الدلالة عن طريق إضافة القيم التي تمثلها هذه البتات.
- تم فك تشفير الدلالة:
ثم نحتاج إلى الضرب بالقاعدة، 2، إلى قوة الأس، للحصول على النتيجة النهائية:
هكذا
وهذا يعادل:
حيث s هو بت الإشارة، وx هو الأس، و m هو الدال.
حدود الدقة للقيم العشرية (بين 1 و16777216)
- الأعداد العشرية بين 1 و2: فاصل ثابت 2 −23 (1+2 −23 هو ثاني أكبر عدد عشري بعد 1)
- الأعداد العشرية بين 2 و4: فاصل ثابت 2 −22
- الأعداد العشرية بين 4 و8: فاصل ثابت 2 −21
- ...
- الأعداد العشرية بين 2n و 2 n+1 : فاصل ثابت 2n-23
- ...
- الأعداد العشرية بين 2 22 =4194304 و2 23 =8388608: فاصل ثابت 2 −1 =0.5
- الأعداد العشرية بين 2 23 =8388608 و 2 24 =16777216: فاصل ثابت 2 0 =1
حدود الدقة على القيم الصحيحة
- يمكن تمثيل الأعداد الصحيحة بين 0 و16777216 بشكل دقيق (ينطبق أيضًا على الأعداد الصحيحة السالبة بين −16777216 و0)
- الأعداد الصحيحة بين 2 24 =16777216 و 2 25 =33554432 يتم تقريبها إلى مضاعف 2 (عدد زوجي)
- الأعداد الصحيحة بين 2 25 و 2 26 تقرب إلى مضاعفات 4
- ...
- الأعداد الصحيحة بين 2n و 2 n+1 تقرب إلى مضاعفات 2n -23
- ...
- الأعداد الصحيحة بين 2 127 و 2 128 تقرب إلى مضاعفات 2 104
- الأعداد الصحيحة الأكبر من أو تساوي 2 128 يتم تقريبها إلى "ما لا نهاية".
حالات الدقة الفردية البارزة
يتم تقديم هذه الأمثلة في تمثيل بت ، بالنظام السداسي عشري والثنائي ، لقيمة النقطة العائمة. ويشمل ذلك الإشارة، والأس (المتحيز)، والدلالة.
0 00000000 00000000000000000000001 2 = 0000 0001 16 = 2 −126 × 2 −23 = 2 −149 ≈ 1.4012984643 × 10 −45
(أصغر عدد موجب دون الطبيعي)
0 00000000 11111111111111111111111 2 = 007f ffff 16 = 2 −126 × (1 − 2 −23 ) ≈ 1.1754942107 ×10 −38
(أكبر عدد أقل من الطبيعي)
0 00000001 00000000000000000000000 2 = 0080 0000 16 = 2 −126 ≈ 1.1754943508 × 10 −38
(أصغر عدد طبيعي موجب)
0 11111110 11111111111111111111111 2 = 7f7f ffff 16 = 2 127 × (2 − 2 −23 ) ≈ 3.4028234664 × 10 38
(أكبر عدد طبيعي)
0 01111110 11111111111111111111111 2 = 3f7f ffff 16 = 1 − 2 −24 ≈ 0.999999940395355225
(أكبر عدد أقل من واحد)
0 01111111 00000000000000000000000000 2 = 3f80 0000 16 = 1 (واحد)
0 01111111 00000000000000000000001 2 = 3f80 0001 16 = 1 + 2 −23 ≈ 1.00000011920928955
(أصغر رقم أكبر من واحد)
1 10000000 0000000000000000000000000 2 = c000 0000 16 = −2
0 00000000 00000000000000000 2 = 0000 0000 16 = 0
1 00000000 00000000000000000 2 = 8000 0000 16 = −0
0 11111111 00000000000000000000000000 2 = 7f80 0000 16 = ما لا نهاية
1 11111111 00000000000000000000000000 2 = ff80 0000 16 = −اللانهاية
0 10000000 10010010000111111011011 2 = 4049 0fdb 16 ≈ 3.14159274101257324 ≈ π ( باي )
0 01111101 01010101010101010101011 2 = 3eaa aaab 16 ≈ 0.333333343267440796 ≈ 1/3
x 11111111 1000000000000000000000001 2 = ffc0 0001 16 = qNaN (على معالجات x86 وARM)
x 11111111 00000000000000000000000001 2 = ff80 0001 16 = sNaN (على معالجات x86 وARM)
افتراضيًا، يتم تقريب 1/3 لأعلى، بدلاً من التقريب لأسفل مثل الدقة المزدوجة ، وذلك بسبب العدد الزوجي للبتات في القيمة ذات الدلالة. البتات التي تبلغ 1/3 بعد نقطة التقريب هي 1010...التي تزيد عن 1/2 وحدة في المكان الأخير .
لم يتم تحديد ترميزات qNaN وsNaN في IEEE 754 وتم تنفيذها بشكل مختلف على معالجات مختلفة. تستخدم معالجات عائلة x86 وعائلة ARM البت الأكثر أهمية في حقل الدلالات للإشارة إلى NaN هادئ. تستخدم معالجات PA-RISC البت للإشارة إلى NaN إشارة.
التحسينات
يسمح تصميم تنسيق الفاصلة العائمة بالعديد من التحسينات الناتجة عن التوليد السهل لتقريب لوغاريتم الأساس 2 من عرض عدد صحيح لنمط البت الخام. يمكن أن يؤدي الحساب الصحيح وتحويل البت إلى تقريب للجذر التربيعي العكسي السريع ، وهو مطلوب بشكل شائع في رسومات الكمبيوتر .
انظر أيضا
- معهد مهندسي الكهرباء والإلكترونيات 754
- ISO/IEC 10967 ، الحساب المستقل عن اللغة
- نوع البيانات البدائي
- الاستقرار العددي
- التدوين العلمي
مراجع
- ^ "REAL Statement". scc.ustc.edu.cn . مؤرشف من الأصل في 2021-02-24 . تم الاسترجاع في 2013-02-28 .
- ^ "CLHS: النوع SHORT-FLOAT، SINGLE-FLOAT، DOUBLE-FLOAT..." www.lispworks.com .
- ^ "أنواع البيانات البدائية". توثيق جافا .
- ^ "6 أنواع وفئات محددة مسبقًا". haskell.org . 20 يوليو 2010.
- ^ "Float". وثائق مطوري Apple .
- ^ ويليام كاهان (1 أكتوبر 1997). "ملاحظات محاضرات حول حالة معيار IEEE 754 للحسابات الثنائية ذات الفاصلة العائمة" (PDF) . ص. 4. مؤرشف من الأصل (PDF) في 8 فبراير 2012.
روابط خارجية
- محرر نمط البتات العائمة المباشرة
- حاسبة على الانترنت
- محول عبر الإنترنت لأرقام IEEE 754 بدقة واحدة
- كود مصدر C للتحويل بين الدقة المزدوجة والمفردة ونصف الدقة وفقًا لمعايير IEEE
