آي إي إي إي 754-2008

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث

معيار IEEE لعمليات الفاصلة العائمة الحسابية (IEEE 754) هو معيار تقني وضعته جمعية مهندسي الكهرباء والإلكترونيات (IEEE) وهو المعيار الأكثر انتشارا لعمليات الفاصلة العائمة الحسابية وتلتزم به الكثير من التطبيقات البرمجية وتطبيقات العتاد (وحدة المعالجة المركزية ووحدة الفاصلة العائمة). تسمح العديد من لغات البرمجة أو تفرض إجراء بعض أو كل العمليات الحسابية باستخدام صيغ وعمليات معيار IEEE 754. النسخة الحالية من المعيار هي IEEE 754-2008 المنشورة في أغسطس 2008 وتشمل محتوى المعيار IEEE 754-1985 تقريبا بالكامل (المنشور في 1985) ومعيار IEEE لعمليات الفاصلة العائمة الحسابية الشامل لجميع الأساسات (معيارIEEE 854-1987). وافقت لجنة JTC1/SC 25 على تبني المعيار الدولي ISO/IEC/IEEE 60559:2011 من خلال اتفاقية ISO/IEEE PSDO..[1][2]

يقوم المعيار بتعريف:

كما يشمل المعيار توصيات هامة خاصة بالأسلوب المتقدم في التعامل مع الاستثناءات وتوصيات خاصة بعمليات إضافية (مثل الدوال المثلثية) وحساب قيمة التعبيرات الحسابية والوصول إلى نتائج قابلة للتكرار. بني المعيار على معيار معيار IEEE 754-1985 وحل محله، صدرت النسخة السابقة–بعد سبع سنوات من المراجعة – تحت إشراف دان زوراس وحررها مايك كوليشو. يشمل المعيار الجديد الصيغ الثنائية الموجودة في المعيار الأول بالإضافة إلى ثلاثة صيغ أساسية جديدة (واحدة ثنائية وإثنتين عشريتين)، لابد ان يدعم أي تطبيق واحدا على الأقل من الصيغ الأساسية كصيغة حسابية وصيغة تبادل حتى يكون موافقا للمعيار.

الصيغ[عدل]

تصف الصيغ في معيار IEEE 754 مجموعات من بيانات الفاصلة العائمة وكيفية تمثيلها في عملية تبادل. تضم أي صيغة التالي:

  • أرقام محدودة قد يكون أساسها 2 (ثنائي) أو 10 (عشري). يمكن وصف أي رقم محدود ببساطة من خلال ثلاثة أعداد صحيحة: s= الإشارة (صفر أو واحد)، c= المعامل، q= الأس. قيمة الرقم المحدود هي
      (−1)s × c × bq
    حيث b هي الأساس (2 أو 10). فمثلا إذا كانت الإشارة 1 (سالب) والمعامل 12345 والأس –3 والأساس 10 فقيمة الرقم هي −12.345.
  • لا نهايتان: +∞ و−∞.
  • نوعان من القيم غير الرقمية (بمؤشر signaling وبدون مؤشر quiet). يمكن أيضا أن تضم القيمة غير الرقمية قيمة تسمى payload الهدف منها نقل معلومات عن مصدر القيمة الغير رقمية. لا معنى لإشارة القيمة الغير رقمية ولكن يمكن توقعها في بعض الظروف.

يمكن معرفة المجال الرقمي المحدود الذي يمكن تمثيله من خلال صيغة من الصيغ عن طريق الأساس (b)، عدد الأرقام في المعامل (الدقة p) ومتغير الأس emax:

  • يجب أن تكون c عددا صحيحا ينحصر بين صفر وbp−1 (مثلا إذا كانت b=10 وp=7 إذن c تأخذ القيم بين 0 و9999999)
  • يجب أن تكون q عددا صحيحا بحيث يكون 1−emax ≤ q+p−1 ≤ emax (مثلا إذا كانت p=7 وemax=96 إذن تأخذ q القيم بين -101 و90)

إذن أصغر عدد موجب لا يساوي الصفر يمكن تمثيله (من خلال القيم السابقة) هو 1×10−101 وأكبر عدد هو 9999999×1090 (9.999999×1096)، والمجال ينحصر بين −9.999999×1096 و9.999999×1096. تعتبر الأعداد الأقرب لمقلوب نهايتي هذا المجال (−1×10−95 و1×10−95) أصغر الأعداد الطبيعية (في المقدار)، تسمى الأعداد التي تنحصر بين هذين العددين ولا تساوي الصفر بالأعداد دون الطبيعية subnormal numbers. القيم الصفرية هي قيم محدودة معاملها صفر، وهذه هي الأصفار ذات الإشارة وتحدد بت الإشارة إذا كان الصفر هو -0 (صفرا سالبا) أو +0 (صفرا موجبا).

الصيغ الأساسية[عدل]

يعرف المعيار خمسة صيغ أساسية تسمى حسب أساسها وعدد البتات المستخدمة في تمثيلها. لابد أن يدعم أي تطبيق برمجي متوافق مع هذا المعيار صيغة واحدة على الأقل بالكامل. هناك ثلاثة صيغ فاصلة عائمة ثنائية (يمكن تمثيلها باستخدام 32 و64 و128 بت) وصيغتان فاصلة عائمة عشريتين (يمكن تمثيلها باستخدام 64 و128 بت). صيغتي binary32 وbinary64 هما الموجودتان في معيار IEEE 754-1985 باسم single وdouble.

دقة الصيغ الثنائية تزيد بواحد عن عن عدد البتات المستخدمة في معاملها نظرا لوجود بت خفية.

الاسم الاسم الشائع Base Digits E min E max ملاحظات Decimal
digits
Decimal
E max
binary16 Half precision 2 10+1 −14 +15 storage, not basic 3.31 4.51
binary32 Single precision 2 23+1 −126 +127 7.22 38.23
binary64 Double precision 2 52+1 −1022 +1023 15.95 307.95
binary128 Quadruple precision 2 112+1 −16382 +16383 34.02 4931.77
decimal32 10 7 −95 +96 storage, not basic 7 96
decimal64 10 16 −383 +384 16 384
decimal128 10 34 −6143 +6144 34 6144

القيمة العشرية لـ digits هي digits × log10 base وهذه هي القيمة العشرية للدقة. القيمة العشرية لـ Emax هي Emax × log10 base وهذه هي القيمة العشرية لأكبر أس ممكن. تدعم تطبيقات العتاد والتطبيقات البرمجية كل الصيغ الأساسية.

الصيغ الحسابية[عدل]

لا حاجة لوجود أسلوب ترميز encoding للصيغ التي تستخدم فقط في عمليات حسابية أو أي عمليات أخرى (فيمكن ان يستخدم التطبيق أي طريقة خاصة لتمثيل هذه الصيغ) كل ما يجب تعريفه هو متغيراتها (b وp وemax) التي تصف مجموعة الأعداد المحدودة (المكونة من الإشارة والمعامل والأس) التي يمكن تمثيلها.

صيغ التبادل[عدل]

الهدف من هذه الصيغ هو تبادل بيانات الفاصلة العائمة عن طريق سلاسل بتات ثابتة الطول لكل صيغة. يضم المعيار تعريف صيغ تبادل بطول 16 بت و32 بت و64 بت ومضاعفات 32 بت≥ 128 لتبادل أعداد الفاصلة العائمة الثنائية. تستخدم صيغة 16 بت في تبادل أو تخزين الأرقام الصغيرة (للرسوميات مثلا). يتم تمثيل صيغ التبادل الثنائية هذه بنفس الطريقة المستخدمة في معيار IEEE 754-1985: بت للإشارة يليها w بت للأس تمثل إزاحة الأس بالقيمة bias وp-1 بت تمثل المعامل. يحسب عدد البتات المستخدمة في تمثيل الأس في أي صيغة مكونة من k بت كالتالي w = floor(4 log2(k))−13. وتنطبق هذه القاعدة على صيغتي 64 و128 بت، أما صيغتي 16 و32 بت فتستخدم بتات لتمثيل الأس (5 و8) أكثر مما تمح به هذه القاعدة (3 و7). كما هو الحال في معيار IEEE 754-1985 يوجد بعض السلاسة في تمثيل القيم الغير رقمية ذات المؤشر. يوجد صيغ تبادل بمضاعفات 32 بت لتبادل أرقام الفاصلة العائمة العشرية. تمثل الأعداد في صيغ التبادل العشرية بنفس الطريقة تقريبا باستخدام الإشارة والأس والمعامل فيما عدا استخدام أسلوب أكثر تعقيدا لإتاحة تمثيل المعامل كسلسلة مضغوطة من الأرقام العشرية (أرقام دينسيلي العشرية المضغوطة Densely packed decimal) أو عدد ثنائي. الأرقام التي يمكن تمثيلها واحدة في كلا الأسلوبين، والقيم الغير رقمية ذات المؤشر لها تمثيل خاص بها (ومجموعة مماثلة من قيم payloads)

خوارزميات التقريب[عدل]

يعرف المعيار خمس خوارزميات تقريب. أول إثنين يقربان لأقرب قيمة ويسمى الآخرون بخوارزميات التقريب الموجه:

التقريب للأقرب[عدل]

التقريب الموجه[عدل]

  • التقريب تجاه الصفر – تقريب موجه ناحية الصفر (يعرف أيضا بالاقتطاع truncation)
  • التقريب تجاه +∞ - تقريب موجه ناحية اللانهاية الموجبة (يعرف أيضا بالتقريب للأعلى)
  • التقريب تجاه −∞ - تقريب موجه ناحية اللانهاية السالبة (يعرف أيضا بالتقريب للأسفل)

العمليات[عدل]

العمليات المطلوبة لأي صيغة حسابية (بما فيها الصيغ الأساسية) يتم دعمها:

  • العمليات الحسابية (الجمع والطرح والضرب والقسمة والجذر التربيعي والضرب والجمع المدمجين والباقي وغيرها)
  • التحويلات (بين الصيغ المختلفة، ومن وإلى السلاسل النصية وغيرها)
  • التحجيم scaling والتقسيم quantizing (للأعداد العشرية)
  • نسخ وتعديل الإشارة (إيجاد القيمة المطلقة، النفي وغيره)
  • المقارنات والترتيب الكلي
  • تصنيف واختبار القيم الغير رقمية
  • مؤشرات flags الاختبار والإعداد
  • عمليات إضافية

مقياس الترتيب الكلي[عدل]

يقدم المعيار المقياس totalOrder الذي يعرف الترتيب الكلي لجميع أعداد الفاصلة العائمة في كل صيغة، ويتفق مع عمليات المقارنة العادية حين تقول أن عددا أكبر من آخر، ولكن عمليات المقارنة العادية تتعامل مع القيم الغير رقمية ككميات غير مرتبة وتساوي بين -0 و+0. أما totalOrder فهو قادر على ترتيب هذه الحالات كما أنه يميز بين الطرق المختلفة لتمثيل القيم غير الرقمية ويفرق بين طرق تمثيل العدد العشري الواحد.

التعامل مع الاستثناءات[عدل]

يعرف المعيار خمس استثناءات وكل منها له مؤشر حالة status flag يعلن عند حدوث الاستثناء (فيما عدا بعض الحالات التي تكون القيمة فيها أقل من الحد الأدنى). لا حاجة للقيام بأي شيء آخر ولكن ينصح ببعض البدائل (أنظر بالأسفل).

الخمس استثناءات المحتملة:

  • عملية غير مسموح بها (مثل الجذر التربيعي لرقم سالب)
  • القسمة على صفر
  • تجاوز الحد الأقصى overflow (لا يمكن تمثيل الناتج بشكل صحيح لأن قيمته كبيرة جدا)
  • النزول عن الحد الأدنى underflow (الناتج صغير جدا (خارج المجال الطبيعي) وغير دقيق)
  • ناتج غير دقيق

هذه الخمس استثناءات هي نفسها الموجودة في معيار IEEE 754-1985.

توصيات[عدل]

أسلوب بديل للتعامل مع الاستثناءات[عدل]

يوصي المعيار باستخدام أساليب مختلفة للتعامل مع الاستثناءات مثل traps (استثناءات تغير خط سير البرنامج بشكل ما) وأساليب التعامل مع الاستثناءات الأخرى التي تقاطع خط سير البرنامج مثل try/catch. تبقى آلية traps وغيرها من آليات التعامل مع الاستثناءات اختيارية كما كانت في معيار IEEE 754-1985.

عمليات يوصى بها[عدل]

توصي أحد الفقرات الجديدة في المعيار بخمسين عملية يجب أن تقوم معايير لغات البرمجة بتعريفها مثل اللوغاريتم والرفع إلى أس والدوال المثلثية، هذه كلها عمليات اختيارية (غير مطلوبة حتى تكون اللغة موافقة للمعيار)، كما تشمل بعض عمليات التعامل مع النمط المتغير للخصائص attributes وبعض عمليات الاختزال (مجموع، مضروب وغيرها)، كل هذه العمليات مطلوبة لتقريب النتائج بشكل صحيح ولكن لا ضرورة أن تكون قادرة على اكتشاف حالات عدم الدقة أو الإعلان عنها.

حساب قيمة التعبيرات الحسابية[عدل]

يوصي المعيار بكيفية تعريف معايير لغات البرمجة لمعاني سلاسل من العمليات كما يشير إلى التفاصيل الصغيرة في المعنى الحرفي وتحقيق الامثلية optimization التي تغير قيمة الناتج.

القابلية للتكرار[عدل]

ترك معيار IEEE 754-1985 المجال لبعض الاختلافات بين تطبيق وآخر (مثل طرق تمثيل بعض القيم والتعرف على بعض الاستثناءات). ضيق معيار IEEE 754-2008 مجال الاختلاف في هذه المسائل ولكن ما زالت هناك بعض الاختلافات (خاصة في الصيغ الثنائية). توصي الفقرة الخاصة بالقابلية للتكرار أنه يجب أن يقدم معيار اللغة بعض وسائل كتابة برامج متكررة النتائج (برامج نتائجها واحدة مع جميع التطبيقات المختلفة للغة) وتصف ما ينبغي القيام به للحصول على نتائج متكررة.

التمثيل الرمزي[عدل]

يتطلب المعيار عمليات للتحويل بين الصيغ الأساسية وصيغ السلاسل الرمزية الخارجية. لابد من وجود عمليات للتحويل من وإلى الصيغة العشرية الرمزية لكل الصيغ. لابد أن تتم عملية التحويل إلى سلسلة رمزية خارجية بحيث يمكن عمل تحويل عكسي باستخدام التقريب للقيمة الزوجية والحصول على القيمة الأصلية. لا ضرورة للاحتفاظ بقيمة payload الموجودة في القيم الغير رقمية ذات المؤشر أو القيم الغير رقمية بدون المؤشر. يمكن أن تؤدي عملية التحويل من السلسلة الرمزية الخارجية إلى تحويل قيمة غير رقمية بمؤشر إلى قيمة غير رقمية بدون مؤشر.

يمكن الاحتفاظ بالقيمة الثنائية الأصلية خلال عملية التحويل إلى القيمة العشرية والعكس باستخدام:

5 أرقام عشرية لصيغة binary16
9 أرقام عشرية لصيغة binary32
17 أرقام عشري لصيغة binary64
36 أرقام عشري لصيغة binary128

يمكن حساب عدد الأرقام العشرية المطلوبة لتمثيل الصيغ الثنائية الأخرى

1 + ceiling(p×log102)

حيث p هي عدد البتات الموجودة في المعامل في الصيغة الثنائية، 24 بت مثلا لصيغة binary32. يمكن ضمان صحة عملية التقريب فقط إذا كان عدد الأرقام العشرية يزيد بـ3 عن عدد الأرقام العشرية لأكبر صيغة ثنائية تدعمها اللغة. مثلا إذا كانت صيغة binary32 هي أكبر صيغة ثنائية تدعمها اللغة إذن يمكن ضمان عملية تحويل وتقريب سلسلة عشرية خارجية مكونة من 12 رقم عند تحويلها لصيغة binary32، ولكنها غير مضمونة لسلسلة عشرية من 13 رقم. عند استخدام أحد صيغ الفاصلة العائمة العشرية يمكن الاحتفاظ بالقيمة العشرية باستخدام:

7 أرقام عشرية لصيغة decimal32
16 أرقام عشرية لصيغة decimal64
34 أرقام عشرية لصيغة decimal128

أنظر أيضا[عدل]

لمزيد من القراءة[عدل]

المراجع[عدل]

المعيار[عدل]

مراجع ثانوية[عدل]

وصلات خارجية[عدل]