# آي تربل إي 754 المنقح

آي تربل إي 754 المنقح (بالإنجليزية: IEEE 754 Revision)‏ أو معيار معهد مهندسي الكهرباء والإلكترونيات لعمليات الفاصلة العائمة الحسابية المنقح (بالإنجليزية: IEEE Standard for Floating-Point Arithmetic)‏ هو معيار تقني وضعه معهد مهندسي الكهرباء والإلكترونيات (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.
يقوم المعيار بتعريف:
* الصيغ الحسابية: مجموعات من بيانات الفاصلة العائمة الثنائية والعشرية مكونة من أرقام محدودة (وتشمل الأصفار ذات الإشارة والأرقام دون الطبيعية) واللانهايات وقيم «غير رقمية» خاصة (قيمة غير رقمية NaN)
* صيغ التبادل: طرق التمثيل (سلاسل من البتات) التي يمكن استخدامها في تبادل بيانات الفاصلة العائمة بشكل احترافي وباستخدام أقل قدر من البيانات
* خوارزميات التقريب: الطرق المستخدمة في تقريب الأرقام في العمليات الحسابية وعمليات التحويل
* العمليات: العمليات الحسابية وغيرها التي يمكن إجراؤها على الصيغ الحسابية
* التعامل مع الاستثناء exception handling: الإشارة إلى الحالات الاستثنائية (مثل القسمة على الصفر وتجاوز الحد الأقصى overflow وغيرها)
كما يشمل المعيار توصيات هامة خاصة بالأسلوب المتقدم في التعامل مع الاستثناءات وتوصيات خاصة بعمليات إضافية (مثل الدوال المثلثية) وحساب قيمة التعبيرات الحسابية والوصول إلى نتائج قابلة للتكرار. بني المعيار على معيار معيار IEEE 754-1985 وحل محله، صدرت النسخة السابقة–بعد سبع سنوات من المراجعة – تحت إشراف دان زوراس وحررها مايك كوليشو. يشمل المعيار الجديد الصيغ الثنائية الموجودة في المعيار الأول بالإضافة إلى ثلاثة صيغ أساسية جديدة (واحدة ثنائية وإثنتين عشريتين)، لابد ان يدعم أي تطبيق واحدا على الأقل من الصيغ الأساسية كصيغة حسابية وصيغة تبادل حتى يكون موافقا للمعيار.

## الصيغ

تصف الصيغ في معيار IEEE 754 مجموعات من بيانات الفاصلة العائمة وكيفية تمثيلها في عملية تبادل. تضم أي صيغة التالي:
* أرقام محدودة قد يكون أساسها 2 (ثنائي) أو 10 (عشري). يمكن وصف أي رقم محدود ببساطة من خلال ثلاثة أعداد صحيحة: s= الإشارة (صفر أو واحد)، c= المعامل، q= الأس. قيمة الرقم المحدود هي (−1)$^s$ × c × b$^q$ حيث 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×10$^{90}$ (9.999999×10$^{96}$)، والمجال ينحصر بين −9.999999×10$^{96}$ و9.999999×10$^{96}$. تعتبر الأعداد الأقرب لمقلوب نهايتي هذا المجال (−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 |
| تنسيق النقطة العائمة مزدوج الدقة | 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).

## خوارزميات التقريب

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

### التقريب للأقرب

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

### التقريب الموجه

* التقريب تجاه الصفر – تقريب موجه ناحية الصفر (يعرف أيضا بالاقتطاع 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×log$_{10}$2)
حيث p هي عدد البتات الموجودة في المعامل في الصيغة الثنائية، 24 بت مثلا لصيغة binary32. يمكن ضمان صحة عملية التقريب فقط إذا كان عدد الأرقام العشرية يزيد بـ3 عن عدد الأرقام العشرية لأكبر صيغة ثنائية تدعمها اللغة. مثلا إذا كانت صيغة binary32 هي أكبر صيغة ثنائية تدعمها اللغة إذن يمكن ضمان عملية تحويل وتقريب سلسلة عشرية خارجية مكونة من 12 رقم عند تحويلها لصيغة binary32، ولكنها غير مضمونة لسلسلة عشرية من 13 رقم. عند استخدام أحد صيغ الفاصلة العائمة العشرية يمكن الاحتفاظ بالقيمة العشرية باستخدام:
    7 أرقام عشرية لصيغة decimal32
    16 أرقام عشرية لصيغة decimal64
    34 أرقام عشرية لصيغة decimal128

## انظر أيضا

* معالج IBM Power 6, a CPU that implements IEEE 754-2008 fully in hardware
* strictfp, a keyword in the جافا that ensures IEEE 754 implementation.