حساب الفاصلة العائمة
| تنسيقات النقطة العائمة |
|---|
| معهد مهندسي الكهرباء والإلكترونيات 754 |
|
| Other |
| Alternatives |
| Tapered floating point |
في الحوسبة ، الحساب العشري هو حساب على مجموعات فرعية من الأعداد الحقيقية التي تتكون من تسلسل موقّع لعدد ثابت من الأرقام في بعض القواعد ، تسمى ذات دلالة ، مقاسة بأس عدد صحيح لتلك القاعدة . تسمى الأعداد من هذا الشكل بالأعداد العشرية . [1] : 3 [2] : 10
على سبيل المثال، الرقم 2469/200 هو رقم فاصلة عائمة في الأساس عشرة بخمسة أرقام: ومع ذلك، فإن 7716/625 = 12.3456 ليس رقمًا فاصلًا عائمًا في الأساس عشرة بخمسة أرقام - فهو يحتاج إلى ستة أرقام. أقرب رقم فاصل عائم بخمسة أرقام فقط هو 12.346. و1/3 = 0.3333... ليس رقمًا فاصلًا عائمًا في الأساس عشرة بأي عدد محدود من الأرقام. في الممارسة العملية، تستخدم معظم أنظمة الفاصلة العائمة الأساس اثنين ، على الرغم من أن الأساس عشرة ( الفاصلة العائمة العشرية ) شائع أيضًا.
تقرب العمليات الحسابية ذات الفاصلة العائمة، مثل الجمع والقسمة، العمليات الحسابية للأعداد الحقيقية المقابلة عن طريق تقريب أي نتيجة ليست عددًا فاصلًا عائمًا بحد ذاته إلى رقم فاصل عائم قريب. [1] : 22 [2] : 10 على سبيل المثال، في عملية حسابية ذات فاصلة عائمة بخمسة أرقام أساسية من عشرة، يمكن تقريب المجموع 12.345 + 1.0001 = 13.3451 إلى 13.345.
يشير مصطلح النقطة العائمة إلى حقيقة مفادها أن النقطة الأساسية للرقم يمكن أن "تطفو" في أي مكان إلى اليسار أو اليمين أو بين الأرقام المهمة للرقم. يتم تحديد هذا الموضع بواسطة الأس، لذا يمكن اعتبار النقطة العائمة شكلاً من أشكال التدوين العلمي .
يمكن استخدام نظام الفاصلة العائمة لتمثيل أرقام ذات أوامر مختلفة جدًا من حيث الحجم باستخدام عدد ثابت من الأرقام - مثل عدد الأمتار بين المجرات أو بين البروتونات في الذرة . لهذا السبب، غالبًا ما يتم استخدام الحساب الفاصلة العائمة للسماح بأعداد حقيقية صغيرة جدًا وكبيرة جدًا تتطلب أوقات معالجة سريعة. نتيجة هذا النطاق الديناميكي هي أن الأرقام التي يمكن تمثيلها ليست متباعدة بشكل متساوٍ؛ يختلف الفرق بين رقمين متتاليين قابلين للتمثيل باختلاف أسهما. [3]


على مر السنين، تم استخدام مجموعة متنوعة من التمثيلات ذات الفاصلة العائمة في أجهزة الكمبيوتر. في عام 1985، تم وضع معيار IEEE 754 للحسابات ذات الفاصلة العائمة، ومنذ التسعينيات، أصبحت التمثيلات الأكثر شيوعًا هي تلك التي حددها IEEE.
إن سرعة عمليات النقطة العائمة، والتي يتم قياسها عادةً من حيث FLOPS ، هي سمة مهمة لنظام الكمبيوتر ، وخاصةً للتطبيقات التي تنطوي على حسابات رياضية مكثفة.
وحدة النقطة العائمة (FPU، أو معالج الرياضيات المساعد ) هي جزء من نظام الكمبيوتر المصمم خصيصًا لإجراء العمليات على الأرقام ذات النقطة العائمة.
ملخص
الأرقام العائمة
يشير تمثيل الرقم إلى طريقة ما لترميز رقم، عادةً على شكل سلسلة من الأرقام.
توجد عدة آليات يمكن من خلالها لسلاسل الأرقام أن تمثل الأرقام. في التدوين الرياضي القياسي، يمكن أن تكون سلسلة الأرقام بأي طول، ويُشار إلى موقع نقطة الأساس بوضع حرف "نقطة" صريح (نقطة أو فاصلة) هناك. إذا لم يتم تحديد نقطة الأساس، فإن السلسلة تمثل ضمناً عددًا صحيحًا وستكون نقطة الأساس غير المحددة بعيدة عن الطرف الأيمن من السلسلة، بجوار الرقم الأقل أهمية. في أنظمة النقطة الثابتة ، يتم تحديد موضع في السلسلة لنقطة الأساس. لذا قد يستخدم مخطط النقطة الثابتة سلسلة من 8 أرقام عشرية مع النقطة العشرية في المنتصف، حيث يمثل "00012345" 0001.2345.
في التدوين العلمي ، يتم قياس الرقم المعطى بقوة 10 ، بحيث يقع ضمن نطاق معين - عادة بين 1 و10، مع ظهور نقطة الأساس مباشرة بعد الرقم الأول. كقوة عشرة، يتم الإشارة إلى عامل القياس بشكل منفصل في نهاية الرقم. على سبيل المثال، الفترة المدارية لقمر المشتري Io هي152,853.5047 ثانية، وهي القيمة التي يمكن تمثيلها في صيغة علمية قياسية على النحو التالي:1.528535047 × 10 5 ثواني.
يعتبر تمثيل النقطة العائمة مشابهًا من حيث المفهوم للتدوين العلمي. منطقيًا، يتكون رقم النقطة العائمة من:
- سلسلة أرقام موقعة (بمعنى موجبة أو سالبة) بطول معين في قاعدة (أو أساس ) معينة. يشار إلى سلسلة الأرقام هذه باسم الدال أو العشري أو المعامل . [ملاحظة 1] يحدد طول الدال الدقة التي يمكن بها تمثيل الأرقام. يُفترض أن يكون موضع النقطة الأساسية دائمًا في مكان ما داخل الدال - غالبًا بعد أو قبل الرقم الأكثر أهمية مباشرةً، أو على يمين الرقم الموجود في أقصى اليمين (الأقل أهمية). تتبع هذه المقالة عمومًا الاتفاقية التي تنص على أن النقطة الأساسية يتم تعيينها بعد الرقم الأكثر أهمية (أقصى اليسار) مباشرةً.
- أس عدد صحيح موقّع (يُشار إليه أيضًا باسم الخاصية أو المقياس )، [nb 2] والذي يعدل مقدار العدد.
للحصول على قيمة الرقم ذي النقطة العائمة، يتم ضرب القيمة الدالّة بالقاعدة المرفوعة إلى قوة الأس ، وهو ما يعادل تحويل نقطة الأساس من موضعها الضمني بعدد من الأماكن يساوي قيمة الأس - إلى اليمين إذا كان الأس موجبًا أو إلى اليسار إذا كان الأس سالبًا.
باستخدام القاعدة 10 ( التدوين العشري المألوف ) كمثال، فإن الرقم152,853.5047 ، الذي يحتوي على عشرة أرقام عشرية من الدقة، يتم تمثيله باعتباره العدد الدال1,528,535,047 مع 5 كأُس. لتحديد القيمة الفعلية، يتم وضع فاصلة عشرية بعد الرقم الأول من القيمة الدالّة ويتم ضرب النتيجة في 105 لإعطاء1.528535047 × 10 5 ، أو152,853.5047 . عند تخزين مثل هذا الرقم، لا يلزم تخزين القاعدة (10)، حيث ستكون هي نفسها بالنسبة لنطاق الأرقام المدعومة بالكامل، وبالتالي يمكن استنتاجها.
رمزيًا، هذه القيمة النهائية هي:
حيث s هي الدلالة (مع تجاهل أي نقطة عشرية ضمنية)، p هي الدقة (عدد الأرقام في الدلالة)، b هي القاعدة (في مثالنا، هذا هو الرقم عشرة )، و e هو الأس.
تاريخيًا، تم استخدام العديد من قواعد الأرقام لتمثيل أرقام الفاصلة العائمة، حيث كانت القاعدة الثانية ( ثنائية ) هي الأكثر شيوعًا، تليها القاعدة عشرة ( نقطة عائمة عشرية )، وأصناف أخرى أقل شيوعًا، مثل القاعدة ستة عشر ( نقطة عائمة سداسية عشرية [4] [5] [nb 3] )، والقاعدة ثمانية (نقطة عائمة ثماني [1] [5] [6] [4] [nb 4] )، والقاعدة أربعة (نقطة عائمة رباعية [7] [5] [nb 5] )، والقاعدة ثلاثة ( نقطة عائمة ثلاثية متوازنة [1] ) وحتى القاعدة 256 [5] [nb 6] والقاعدة65,536 . [8] [ملاحظة 7]
الرقم العشري هو رقم نسبي ، لأنه يمكن تمثيله كعدد صحيح مقسوم على آخر؛ على سبيل المثال1.45 × 10 3 هو (145/100) × 1000 أو145,000 /100. تحدد القاعدة الكسور التي يمكن تمثيلها؛ على سبيل المثال، لا يمكن تمثيل 1/5 بالضبط كرقم فاصل عائم باستخدام قاعدة ثنائية، ولكن يمكن تمثيل 1/5 بالضبط باستخدام قاعدة عشرية (0.2 أو2 × 10 −1 ). ومع ذلك، لا يمكن تمثيل 1/3 بدقة إما بالنظام الثنائي (0.010101...) أو النظام العشري (0.333...)، ولكن في الأساس 3 ، يكون تافهًا (0.1 أو 1×3 −1 ). تعتمد المناسبات التي تحدث فيها التوسعات اللانهائية على القاعدة وعواملها الأولية .
تعتمد الطريقة التي يتم بها تخزين الدلالة (بما في ذلك علامتها) والأس في الكمبيوتر على التنفيذ. يتم وصف تنسيقات IEEE الشائعة بالتفصيل لاحقًا وفي أماكن أخرى، ولكن على سبيل المثال، في التمثيل الثنائي ذي الدقة الفردية (32 بت) ذي الفاصلة العائمة، ، وبالتالي فإن الدلالة عبارة عن سلسلة من 24 بت . على سبيل المثال، أول 33 بت من الرقم π هي:
في هذا التوسع الثنائي، دعنا نشير إلى المواضع من 0 (البت الأقصى إلى اليسار، أو البت الأكثر أهمية) إلى 32 (البت الأقصى إلى اليمين). سيتوقف البت ذو الدلالة 24 عند الموضع 23، كما هو موضح بالبت المسطر.0 أعلاه. البت التالي، في الموضع 24، يسمى بت التقريب أو بت التقريب . ويستخدم لتقريب التقريب المكون من 33 بت إلى أقرب رقم مكون من 24 بت (هناك قواعد محددة للقيم المتوسطة ، وهي ليست الحال هنا). هذا البت، الذي هوفي هذا المثال، يتم إضافة 1 إلى العدد الصحيح المشكل بواسطة 24 بتًا أقصى اليسار، مما ينتج عنه:
عندما يتم تخزين هذا في الذاكرة باستخدام ترميز IEEE 754، يصبح هذا هو الدلالة s . يُفترض أن الدلالة لها نقطة ثنائية على يمين البت الأيسر. لذا، يتم حساب التمثيل الثنائي لـ π من اليسار إلى اليمين على النحو التالي:
حيث p هي الدقة (24 في هذا المثال)، n هو موضع بت الدلالة من اليسار (يبدأ من0 والانتهاء في23 هنا) و e هو الأس (1 في هذا المثال).
يمكن أن يكون مطلوبًا أن يكون الرقم الأكثر أهمية في دلالة أي عدد غير صفري غير صفري (باستثناء الحالات التي يكون فيها الأس المقابل أصغر من الحد الأدنى). تسمى هذه العملية التطبيع . بالنسبة للتنسيقات الثنائية (التي تستخدم الأرقام فقط0 و1 )، هذا الرقم غير الصفري هو بالضرورة1. لذلك، لا يلزم تمثيله في الذاكرة، مما يسمح للتنسيق بالحصول على بت واحد إضافي من الدقة. تُسمى هذه القاعدة بشكل مختلف باتفاقية البت الرائدة ، أو اتفاقية البت الضمنية ، أو اتفاقية البت المخفية ، [1] أو اتفاقية البت المفترضة .
بدائل للأرقام ذات الفاصلة العائمة
إن التمثيل بالفاصلة العائمة هو الطريقة الأكثر شيوعًا لتمثيل التقريب للأعداد الحقيقية في أجهزة الكمبيوتر. ومع ذلك، هناك بدائل:
- يستخدم التمثيل بالنقطة الثابتة عمليات الأجهزة الصحيحة التي يتم التحكم فيها من خلال تنفيذ برمجي لاتفاقية محددة حول موقع النقطة الثنائية أو العشرية، على سبيل المثال، 6 بتات أو أرقام من اليمين. الأجهزة المستخدمة في معالجة هذه التمثيلات أقل تكلفة من النقطة العائمة، ويمكن استخدامها لإجراء عمليات صحيحة عادية أيضًا. تُستخدم النقطة الثابتة الثنائية عادةً في التطبيقات ذات الأغراض الخاصة على المعالجات المضمنة التي لا يمكنها سوى إجراء العمليات الحسابية الصحيحة، ولكن النقطة الثابتة العشرية شائعة في التطبيقات التجارية.
- تمثل أنظمة الأعداد اللوغاريتمية (LNSs) عددًا حقيقيًا من خلال لوغاريتم قيمته المطلقة وبت الإشارة. يكون توزيع القيمة مشابهًا للفاصلة العائمة، ولكن منحنى القيمة إلى التمثيل ( أي الرسم البياني لدالة اللوغاريتم) سلسًا (باستثناء عند 0). وعلى العكس من الحساب ذي الفاصلة العائمة، في نظام الأعداد اللوغاريتمية، يكون تنفيذ الضرب والقسمة والأس أمرًا بسيطًا، ولكن الجمع والطرح معقدان. حساب مؤشر المستوى ( المتماثل ) (LI وSLI) لتشارلز كلينشو وفرانك أولفر وبيتر تورنر هو مخطط يعتمد على تمثيل لوغاريتمي معمم .
- تمثيل النقطة العائمة المدببة ، المستخدم في Unum .
- لا يمكن تمثيل بعض الأعداد النسبية البسيطة ( مثل 1/3 و1/10) بدقة في نظام النقطة العائمة الثنائي، بغض النظر عن الدقة. يسمح استخدام أساس مختلف بتمثيل بعضها ( مثل 1/10 في نظام النقطة العائمة العشري)، لكن الاحتمالات تظل محدودة. تمثل حزم البرامج التي تقوم بالحسابات النسبية الأعداد ككسور ذات بسط ومقام صحيحين، وبالتالي يمكنها تمثيل أي عدد نسبي بدقة. تحتاج مثل هذه الحزم عمومًا إلى استخدام الحساب " bignum " للأعداد الصحيحة الفردية.
- تسمح لك حسابات الفواصل بتمثيل الأرقام على هيئة فواصل والحصول على حدود مضمونة للنتائج. وهي تعتمد بشكل عام على حسابات أخرى، وخاصة الفاصلة العائمة.
- غالبًا ما تستطيع أنظمة الجبر الحاسوبية مثل Mathematica و Maxima و Maple التعامل مع الأعداد غير النسبية مثل أو بطريقة "رسمية" تمامًا ( حساب رمزي )، دون التعامل مع ترميز محدد للدلالة. يمكن لمثل هذا البرنامج تقييم التعبيرات مثل " " بدقة، لأنه مبرمج لمعالجة الرياضيات الأساسية بشكل مباشر، بدلاً من استخدام قيم تقريبية لكل حساب وسيط.
تاريخ

في عام 1914، نشر المهندس الإسباني ليوناردو توريس كيفيدو مقالاً عن الأتمتة ، [9] حيث صمم حاسبة كهروميكانيكية ذات غرض خاص تعتمد على محرك تشارلز باباج التحليلي ووصف طريقة لتخزين الأرقام ذات الفاصلة العائمة بطريقة متسقة. وذكر أن الأرقام سيتم تخزينها بتنسيق أسي مثل n × 10 ، وعرض ثلاث قواعد يمكن من خلالها تنفيذ التلاعب المتسق بالأرقام ذات الفاصلة العائمة بواسطة الآلات. بالنسبة لتوريس، " سيكون n دائمًا نفس عدد الأرقام (على سبيل المثال ستة)، سيكون الرقم الأول من n من رتبة العُشر، والثاني من المائة، وما إلى ذلك، وسيكتب المرء كل كمية في النموذج: n ؛ m ." يوضح الشكل الذي اقترحه الحاجة إلى قيمة ذات حجم ثابت كما هو مستخدم حاليًا للبيانات ذات النقطة العائمة، وتحديد موقع النقطة العشرية في القيمة ذات الحجم الثابت بحيث يكون كل تمثيل فريدًا، وكيفية تنسيق مثل هذه الأرقام من خلال تحديد بناء جملة يجب استخدامه ويمكن إدخاله من خلال آلة كاتبة ، كما كانت حالة جهاز الحساب الكهروميكانيكي الخاص به في عام 1920. [10] [11] [12]
.jpg/440px-Konrad_Zuse_(1992).jpg)
في عام 1938، أكمل كونراد زوسي من برلين Z1 ، أول كمبيوتر ميكانيكي ثنائي قابل للبرمجة ؛ [13] ويستخدم تمثيلًا ثنائيًا لرقم فاصل عائم مكونًا من 24 بتًا مع أس موقّع مكون من 7 بتات، و17 بتًا من الدلالة (بما في ذلك بت ضمني واحد)، وبت إشارة. [14] يحتوي Z3 الأكثر موثوقية القائم على التتابع ، والذي اكتمل في عام 1941، على تمثيلات لكل من اللانهاية الموجبة والسلبية؛ وعلى وجه الخصوص، ينفذ عمليات محددة بلانهاية، مثل ، ويتوقف عند العمليات غير المحددة، مثل .
اقترح زوس أيضًا، لكنه لم يكمل، حسابات الفاصلة العائمة المستديرة بعناية والتي تتضمن وتمثيلات NaN، متوقعًا ميزات معيار IEEE بأربعة عقود. [15] في المقابل، أوصى فون نيومان بعدم استخدام الأرقام ذات الفاصلة العائمة لآلة IAS لعام 1951 ، بحجة أن الحساب ذي النقطة الثابتة هو الأفضل. [15]
كان أول كمبيوتر تجاري مزود بأجهزة ذات فاصلة عائمة هو كمبيوتر Z4 الذي صممه زوس في الفترة من 1942 إلى 1945. وفي عام 1946، قدمت مختبرات بيل طراز V ، الذي نفذ أرقامًا عشرية ذات فاصلة عائمة . [16]
يحتوي جهاز Pilot ACE على حسابات ثنائية ذات فاصلة عائمة، وبدأ تشغيله في عام 1950 في المختبر الوطني للفيزياء بالمملكة المتحدة . تم بيع ثلاثة وثلاثين جهازًا تجاريًا لاحقًا باسم English Electric DEUCE . تم تنفيذ العمليات الحسابية بالفعل في البرنامج، ولكن بمعدل ساعة يبلغ ميغا هرتز واحد، كانت سرعة عمليات الفاصلة العائمة والثابتة في هذا الجهاز أسرع في البداية من نظيراتها في العديد من أجهزة الكمبيوتر المنافسة.
تبع ذلك إنتاج IBM 704 بكميات كبيرة في عام 1954؛ وقد قدم استخدام الأس المتحيز . لعدة عقود بعد ذلك، كانت أجهزة النقطة العائمة ميزة اختيارية عادةً، وكان يُقال عن أجهزة الكمبيوتر التي تحتوي على هذه الميزة أنها "أجهزة كمبيوتر علمية" أو لديها القدرة على " الحساب العلمي " (SC) (انظر أيضًا ملحقات الحساب العلمي (XSC)). لم يكن الأمر كذلك حتى إطلاق Intel i486 في عام 1989 حيث كانت أجهزة الكمبيوتر الشخصية للأغراض العامة تتمتع بقدرة النقطة العائمة في الأجهزة كميزة قياسية.
تم تقديم سلسلة UNIVAC 1100/2200 في عام 1962، وكانت تدعم تمثيلين للفاصلة العائمة:
- دقة واحدة : 36 بت، منظمة كإشارة مكونة من 1 بت، وأس مكون من 8 بت، ودلالة مكونة من 27 بت.
- دقة مزدوجة : 72 بت، منظمة كإشارة مكونة من 1 بت، وأس مكون من 11 بت، ودلالة مكونة من 60 بت.
كما دعمت IBM 7094 ، التي تم طرحها أيضًا في عام 1962، تمثيلات الدقة المفردة والدقة المزدوجة، ولكن دون أي علاقة بتمثيلات UNIVAC. في الواقع، في عام 1964، قدمت IBM تمثيلات الفاصلة العائمة السداسية عشرية في حواسيبها الرئيسية System/360 ؛ ولا تزال هذه التمثيلات نفسها متاحة للاستخدام في أنظمة z/Architecture الحديثة . في عام 1998، نفذت IBM حسابات الفاصلة العائمة الثنائية المتوافقة مع IEEE في حواسيبها الرئيسية؛ في عام 2005، أضافت IBM أيضًا حسابات الفاصلة العائمة العشرية المتوافقة مع IEEE.
في البداية، استخدمت أجهزة الكمبيوتر العديد من التمثيلات المختلفة للأرقام ذات الفاصلة العائمة. كان الافتقار إلى التوحيد القياسي على مستوى الحاسبات المركزية مشكلة مستمرة بحلول أوائل السبعينيات بالنسبة لأولئك الذين يكتبون ويحافظون على أكواد المصدر ذات المستوى الأعلى؛ كانت معايير الفاصلة العائمة هذه تختلف في أحجام الكلمات والتمثيلات وسلوك التقريب والدقة العامة للعمليات. كانت توافقية الفاصلة العائمة عبر أنظمة الحوسبة المتعددة في حاجة ماسة إلى التوحيد القياسي بحلول أوائل الثمانينيات، مما أدى إلى إنشاء معيار IEEE 754 بمجرد أن أصبحت الكلمة ذات 32 بت (أو 64 بت) شائعة. استند هذا المعيار بشكل كبير على اقتراح من شركة إنتل، التي كانت تصمم المعالج المساعد الرقمي i8087 ؛ كما قدمت موتورولا، التي كانت تصمم 68000 في نفس الوقت تقريبًا، مدخلات مهمة أيضًا.

في عام 1989، تم تكريم عالم الرياضيات وعالم الكمبيوتر ويليام كاهان بجائزة تورينج لكونه المهندس المعماري الرئيسي وراء هذا الاقتراح؛ وقد ساعده في ذلك تلميذه جيروم كونين والأستاذ الزائر هارولد ستون . [17]
ومن بين ابتكارات x86 ما يلي:
- تمثيل دقيق للأرقام العائمة على مستوى سلسلة البتات، بحيث تفسر جميع أجهزة الكمبيوتر المتوافقة أنماط البتات بنفس الطريقة. وهذا يجعل من الممكن نقل الأرقام العائمة بدقة وكفاءة من جهاز كمبيوتر إلى آخر (بعد مراعاة الترتيب النهائي ).
- سلوك محدد بدقة للعمليات الحسابية: يلزم إنتاج نتيجة كما لو تم استخدام عمليات حسابية دقيقة للغاية لإنتاج قيمة يتم تقريبها بعد ذلك وفقًا لقواعد محددة. وهذا يعني أن برنامج الكمبيوتر المتوافق سوف ينتج دائمًا نفس النتيجة عند إعطائه مدخلات معينة، وبالتالي تخفيف السمعة الغامضة التي اكتسبتها الحوسبة ذات الفاصلة العائمة بسبب سلوكها الذي يبدو حتى الآن غير حتمي.
- قدرة الظروف الاستثنائية (الفيضان، القسمة على الصفر ، وما إلى ذلك) على الانتشار من خلال الحوسبة بطريقة حميدة ومن ثم التعامل معها بواسطة البرنامج بطريقة خاضعة للرقابة.
مجموعة من الأرقام ذات الفاصلة العائمة
يتكون الرقم ذو الفاصلة العائمة من مكونين ثابتين يعتمد نطاقهما حصريًا على عدد البتات أو الأرقام في تمثيلهما. وبينما تعتمد المكونات خطيًا على نطاقها، فإن نطاق الفاصلة العائمة يعتمد خطيًا على النطاق الدال وأسيًا على نطاق المكون الأسي، والذي يربط نطاقًا أوسع بشكل ملحوظ بالرقم.
في نظام كمبيوتر نموذجي، يحتوي رقم النقطة العائمة الثنائي ذي الدقة المزدوجة (64 بت) على معامل 53 بت (بما في ذلك بت ضمني واحد)، وأس 11 بت، وبت إشارة واحد. نظرًا لأن 2 10 = 1024، فإن النطاق الكامل للأرقام ذات النقطة العائمة الطبيعية الموجبة بهذا التنسيق يتراوح من 2 −1022 ≈ 2 × 10 −308 إلى ما يقرب من 2 1024 ≈ 2 × 10 308 .
عدد الأعداد العشرية العائمة الطبيعية في النظام ( B ، P ، L ، U ) حيث
- ب هو قاعدة النظام،
- P هي دقة الدلالة (في القاعدة B )،
- L هو أصغر أس للنظام،
- U هو أكبر أس للنظام،
يكون .
يوجد أصغر عدد عشري موجب طبيعي،
- مستوى التدفق السفلي = UFL = ،
الذي يحتوي على 1 كرقم رئيسي و0 للأرقام المتبقية من الدالة، وأصغر قيمة ممكنة للأس.
يوجد أكبر عدد عشري عائم،
- مستوى الفائض = OFL = ،
الذي يكون فيه B − 1 هو قيمة كل رقم من أرقام الدالة وأكبر قيمة ممكنة للأس.
بالإضافة إلى ذلك، توجد قيم قابلة للتمثيل تقع بدقة بين −UFL وUFL. وهي الأصفار الموجبة والسالبة ، بالإضافة إلى الأعداد دون الطبيعية .
IEEE 754: النقطة العائمة في أجهزة الكمبيوتر الحديثة
| Floating-point formats |
|---|
| IEEE 754 |
|
| Other |
| Alternatives |
| Tapered floating point |
قامت منظمة IEEE بتوحيد تمثيل الكمبيوتر للأرقام الثنائية ذات الفاصلة العائمة في IEEE 754 (المعروفة أيضًا باسم IEC 60559) في عام 1985. هذا المعيار الأول يتبعه جميع الآلات الحديثة تقريبًا. تم تنقيحه في عام 2008. تدعم أجهزة الكمبيوتر المركزية من IBM تنسيق الفاصلة العائمة السداسي عشر الخاص بـ IBM والفاصلة العائمة العشرية IEEE 754-2008 بالإضافة إلى تنسيق IEEE 754 الثنائي. كانت سلسلة Cray T90 تحتوي على إصدار IEEE، لكن SV1 لا يزال يستخدم تنسيق الفاصلة العائمة Cray. [ بحاجة لمصدر ]
يوفر المعيار العديد من التنسيقات ذات الصلة الوثيقة، والتي تختلف في تفاصيل قليلة فقط. خمسة من هذه التنسيقات تسمى التنسيقات الأساسية ، والبعض الآخر يسمى تنسيقات الدقة الممتدة وتنسيق الدقة القابلة للتمديد . تُستخدم ثلاثة تنسيقات على نطاق واسع بشكل خاص في أجهزة الكمبيوتر واللغات: [ بحاجة لمصدر ]
- دقة واحدة (ثنائية 32)، تستخدم عادة لتمثيل نوع "float" في عائلة لغة C. هذا تنسيق ثنائي يشغل 32 بت (4 بايت) ودقته 24 بت (حوالي 7 أرقام عشرية).
- الدقة المزدوجة (binary64)، تُستخدم عادةً لتمثيل النوع "المزدوج" في عائلة لغة C. هذا تنسيق ثنائي يشغل 64 بتًا (8 بايت) ودقته 53 بتًا (حوالي 16 رقمًا عشريًا).
- صيغة "الدقة الممتدة" المزدوجة ، والتي تسمى أيضًا بشكل غامض "الدقة الممتدة". هذا تنسيق ثنائي يشغل 79 بتًا على الأقل (80 بتًا إذا لم يتم استخدام قاعدة البت المخفية/الضمنية) ودقته 64 بتًا على الأقل (حوالي 19 رقمًا عشريًا). توصي معايير C99 و C11 لعائلة لغة C، في الملحق F ("حسابات النقطة العائمة IEC 60559")، بتوفير مثل هذا التنسيق الممتد كـ " long double ". [18] يتم توفير تنسيق يلبي الحد الأدنى من المتطلبات (دقة دلالية 64 بت، أس 15 بت، وبالتالي مناسب لـ 80 بت) بواسطة بنية x86 . غالبًا ما يمكن استخدام هذا التنسيق على مثل هذه المعالجات مع "long double"، على الرغم من عدم توفر الدقة الممتدة مع MSVC. [19] لأغراض المحاذاة ، تخزن العديد من الأدوات هذه القيمة ذات الـ 80 بت في مساحة 96 بت أو 128 بت. [20] [21] في المعالجات الأخرى، قد يشير "الطول المزدوج" إلى تنسيق أكبر، مثل الدقة الرباعية، [22] أو مجرد الدقة المزدوجة، إذا لم يكن أي شكل من أشكال الدقة الممتدة متاحًا. [23]
تؤدي زيادة دقة التمثيل ذي الفاصلة العائمة بشكل عام إلى تقليل مقدار خطأ التقريب المتراكم الناتج عن الحسابات الوسيطة. [24] تتضمن تنسيقات IEEE الأخرى ما يلي:
- تنسيقات الأعداد العشرية ذات الفاصلة العائمة Decimal64 و decimal128 . هذه التنسيقات (وخاصة Decimal128) منتشرة في المعاملات المالية لأنها، إلى جانب تنسيق Decimal32 ، تسمح بالتقريب الصحيح للأعداد العشرية.
- الدقة الرباعية (ثنائي 128): هذا تنسيق ثنائي يشغل 128 بت (16 بايت) ويبلغ دقته 113 بت (حوالي 34 رقمًا عشريًا).
- نصف الدقة ، والتي تسمى أيضًا binary16، هي قيمة ذات فاصلة عائمة مكونة من 16 بت. يتم استخدامها في لغة الرسوميات NVIDIA Cg ، وفي معيار openEXR (حيث تسبق في الواقع تقديمها في معيار IEEE 754). [25] [26]
يمكن تمثيل أي عدد صحيح بقيمة مطلقة أقل من 2 24 بدقة في تنسيق الدقة المفردة، ويمكن تمثيل أي عدد صحيح بقيمة مطلقة أقل من 2 53 بدقة في تنسيق الدقة المزدوجة. علاوة على ذلك، يمكن تمثيل مجموعة واسعة من قوى 2 أضعاف هذا العدد. تُستخدم هذه الخصائص أحيانًا للبيانات الصحيحة البحتة، للحصول على أعداد صحيحة مكونة من 53 بت على المنصات التي تحتوي على أعداد عشرية بدقة مزدوجة ولكن فقط أعداد صحيحة مكونة من 32 بت.
تحدد المعايير بعض القيم الخاصة، وتمثيلها: اللانهاية الموجبة ( +∞ )، اللانهاية السالبة ( −∞ )، الصفر السالب ( −0) المميز عن الصفر العادي ("الموجب")، وقيم "ليست رقمًا" ( NaNs ).
تختلف مقارنة الأعداد العشرية، كما هو محدد في معيار IEEE، قليلاً عن مقارنة الأعداد الصحيحة المعتادة. فالصفر السالب والموجب يقارنان متساويين، وكل NaN يقارن غير متساوٍ مع كل قيمة، بما في ذلك نفسه. كل الأعداد العشرية المحدودة أصغر تمامًا من +∞ وأكبر تمامًا من −∞ ، وهي مرتبة بنفس طريقة قيمها (في مجموعة الأعداد الحقيقية).
التمثيل الداخلي
يتم عادةً تجميع الأرقام ذات الفاصلة العائمة في بيانات حاسوبية على هيئة بت الإشارة وحقل الأس والدالة أو العدد العشري، من اليسار إلى اليمين. بالنسبة لتنسيقات IEEE 754 الثنائية (الأساسية والممتدة) التي لها تطبيقات أجهزة موجودة، يتم توزيعها على النحو التالي:
| يكتب | أجزاء | تحيز الأس |
دقة البتات |
عدد الأرقام العشرية | ||||
|---|---|---|---|---|---|---|---|---|
| لافتة | الأس | ذات دلالة | المجموع | |||||
| نصف ( IEEE 754-2008 ) | 1 | 5 | 10 | 16 | 15 | 11 | ~3.3 | |
| أعزب | 1 | 8 | 23 | 32 | 127 | 24 | ~7.2 | |
| مزدوج | 1 | 11 | 52 | 64 | 1023 | 53 | ~15.9 | |
| دقة ممتدة x86 | 1 | 15 | 64 | 80 | 16383 | 64 | ~19.2 | |
| رباعية | 1 | 15 | 112 | 128 | 16383 | 113 | ~34.0 | |
بينما يمكن أن يكون الأس موجبًا أو سالبًا، في التنسيقات الثنائية يتم تخزينه كرقم غير موقّع يضاف إليه "تحيز" ثابت. يتم حجز قيم جميع الأصفار في هذا الحقل للأصفار والأعداد دون الطبيعية ؛ يتم حجز قيم جميع الأصفار لللانهاية وNaNs. نطاق الأس للأعداد الطبيعية هو [−126, 127] للدقة الفردية، أو [−1022, 1023] للدقة المزدوجة، أو [−16382, 16383] للرباعي. تستبعد الأعداد الطبيعية القيم دون الطبيعية والأصفار واللانهاية وNaNs.
في تنسيقات التبادل الثنائي IEEE، لا يتم تخزين البت الأول من القيمة المعيارية في بيانات الكمبيوتر. ويُطلق عليه اسم البت "المخفي" أو "الضمني". ولهذا السبب، يحتوي تنسيق الدقة المفردة على قيمة معنوية بدقة 24 بتًا، ويحتوي تنسيق الدقة المزدوجة على 53 بتًا، ويحتوي تنسيق الدقة الرباعية على 113 بتًا.
على سبيل المثال، تم توضيح أعلاه أن π، بعد تقريبه إلى 24 بت من الدقة، يحتوي على:
- العلامة = 0؛ e = 1؛ s = 1100100100001111110111 (بما في ذلك البت المخفي)
مجموع تحيز الأس (127) والأس (1) هو 128، لذا يتم تمثيل ذلك بتنسيق الدقة الفردية على النحو التالي:
- 0 10000000 10010010000111111011011 (باستثناء البت المخفي) = 40490FDB [27] كرقم سداسي عشري .
مثال على تخطيط لنقطة عائمة 32 بت هو

والتخطيط 64 بت ("المزدوج") مشابه.
تنسيقات الفاصلة العائمة الأخرى الجديرة بالملاحظة
بالإضافة إلى تنسيقات معيار IEEE 754 المستخدمة على نطاق واسع ، يتم استخدام تنسيقات أخرى للفاصلة العائمة، أو تم استخدامها، في مجالات محددة معينة.
- تم تطوير تنسيق Microsoft Binary Format (MBF) لمنتجات لغة Microsoft BASIC، بما في ذلك أول منتج على الإطلاق من Microsoft وهو Altair BASIC (1975)، و TRS-80 LEVEL II ، و MBASIC من CP/M ، و BASICA من IBM PC 5150 ، و GW-BASIC من MS-DOS ، و QuickBASIC قبل الإصدار 4.00. تم تحويل إصداري QuickBASIC 4.00 و4.50 إلى تنسيق IEEE 754-1985 ولكن يمكن الرجوع إلى تنسيق MBF باستخدام خيار الأمر /MBF. تم تصميم وتطوير MBF على جهاز Intel 8080 محاكي بواسطة Monte Davidoff ، وهو زميل Bill Gates ، خلال ربيع عام 1975 لجهاز MITS Altair 8800 . دعم الإصدار الأولي في يوليو 1975 تنسيق الدقة الفردية (32 بت) بسبب تكلفة ذاكرة MITS Altair 8800 سعة 4 كيلوبايت. في ديسمبر 1975، أضافت النسخة 8 كيلوبايت تنسيق الدقة المزدوجة (64 بت). تم اعتماد تنسيق متغير الدقة الفردية (40 بت) لوحدات المعالجة المركزية الأخرى، ولا سيما MOS 6502 ( Apple // و Commodore PET و Atari ) و Motorola 6800 (MITS Altair 680) و Motorola 6809 ( TRS-80 Color Computer ). استخدمت جميع منتجات لغة Microsoft من عام 1975 حتى عام 1987 تنسيق Microsoft الثنائي حتى تبنت Microsoft تنسيق IEEE-754 القياسي في جميع منتجاتها بدءًا من عام 1988 إلى إصداراتها الحالية. يتكون MBF من تنسيق MBF أحادي الدقة (32 بت، "BASIC مكون من 6 أرقام")، [28] [29] تنسيق MBF ممتد الدقة (40 بت، "BASIC مكون من 9 أرقام")، [29] وتنسيق MBF مزدوج الدقة (64 بت)؛ [28] [30] يتم تمثيل كل منها بأس مكون من 8 بت، يليه بت إشارة، يليه بت دلالة 23 و31 و55 بت على التوالي.
- يتطلب تنسيق Bfloat16 نفس مقدار الذاكرة (16 بت) مثل تنسيق نصف الدقة IEEE 754 ، لكنه يخصص 8 بتات للأس بدلاً من 5، وبالتالي يوفر نفس النطاق مثل رقم الدقة المفردة IEEE 754. المقايضة هي دقة مخفضة، حيث يتم تقليل حقل الدلالة اللاحق من 10 إلى 7 بت. يستخدم هذا التنسيق بشكل أساسي في تدريب نماذج التعلم الآلي ، حيث يكون النطاق أكثر قيمة من الدقة. توفر العديد من مسرعات التعلم الآلي دعمًا للأجهزة لهذا التنسيق.
- يجمع تنسيق TensorFloat-32 [31] بين 8 بتات من أس Bfloat16 مع 10 بتات من حقل الدلالة اللاحق لتنسيقات نصف الدقة، مما ينتج عنه حجم 19 بت. تم تقديم هذا التنسيق بواسطة Nvidia ، والتي توفر دعمًا للأجهزة له في Tensor Cores لوحدات معالجة الرسومات الخاصة بها استنادًا إلى بنية Nvidia Ampere. عيب هذا التنسيق هو حجمه، الذي ليس قوة 2. ومع ذلك، وفقًا لـ Nvidia، يجب استخدام هذا التنسيق داخليًا فقط بواسطة الأجهزة لتسريع العمليات الحسابية، بينما يجب تخزين المدخلات والمخرجات بتنسيق IEEE 754 أحادي الدقة 32 بت. [31]
- توفر وحدات معالجة الرسوميات ذات بنية Hopper تنسيقين FP8: أحدهما بنفس النطاق العددي مثل نصف الدقة (E5M2) والآخر بدقة أعلى، ولكن نطاق أقل (E4M3). [32] [33]
| يكتب | لافتة | الأس | حقل ذو دلالة لاحقة | مجموع البتات |
|---|---|---|---|---|
| FP8 (E4M3) | 1 | 4 | 3 | 8 |
| FP8 (E5M2) | 1 | 5 | 2 | 8 |
| نصف الدقة | 1 | 5 | 10 | 16 |
| بفلوت16 | 1 | 8 | 7 | 16 |
| تينسور فلوت-32 | 1 | 8 | 10 | 19 |
| دقة واحدة | 1 | 8 | 23 | 32 |
الأرقام القابلة للتمثيل والتحويل والتقريب
بطبيعتها، فإن جميع الأرقام المعبر عنها بتنسيق الفاصلة العائمة هي أرقام نسبية ذات توسع نهائي في الأساس ذي الصلة (على سبيل المثال، توسع عشري نهائي في الأساس 10، أو توسع ثنائي نهائي في الأساس 2). يجب تقريب الأرقام غير النسبية، مثل π أو √2، أو الأرقام النسبية غير المنتهية. كما يحد عدد الأرقام (أو البتات) الدقيقة من مجموعة الأرقام النسبية التي يمكن تمثيلها بدقة. على سبيل المثال، لا يمكن تمثيل العدد العشري 123456789 بدقة إذا كانت ثمانية أرقام عشرية فقط من الدقة متاحة (سيتم تقريبه إلى إحدى القيمتين القابلتين للتمثيل المتداخلتين، 12345678 × 10 1 أو 12345679 × 10 1 )، وينطبق الشيء نفسه على الأرقام غير المنتهية ( يتم تقريب . 5 إلى .55555555 أو .55555556).
عندما يتم تمثيل رقم ما في بعض التنسيقات (مثل سلسلة أحرف) التي لا تمثل تمثيلًا أصليًا للفاصلة العائمة مدعومًا في تنفيذ الكمبيوتر، فسوف يتطلب الأمر تحويلًا قبل أن يمكن استخدامه في هذا التنفيذ. إذا كان من الممكن تمثيل الرقم بدقة في تنسيق الفاصلة العائمة، فسيكون التحويل دقيقًا. إذا لم يكن هناك تمثيل دقيق، فإن التحويل يتطلب اختيار رقم الفاصلة العائمة الذي سيتم استخدامه لتمثيل القيمة الأصلية. سيكون للتمثيل المختار قيمة مختلفة عن القيمة الأصلية، وتسمى القيمة المعدلة بهذه الطريقة القيمة المستديرة .
يعتمد ما إذا كان العدد النسبي له توسع نهائي أم لا على القاعدة. على سبيل المثال، في الأساس 10، يكون للعدد 1/2 توسع نهائي (0.5) بينما لا يكون للعدد 1/3 توسع نهائي (0.333...). في الأساس 2، تكون الأعداد النسبية التي لها مقامات قوى للعدد 2 (مثل 1/2 أو 3/16) منتهية فقط. أي عدد نسبي له مقام له عامل أولي غير 2 سيكون له توسع ثنائي لا نهائي. وهذا يعني أن الأعداد التي تبدو قصيرة ودقيقة عند كتابتها بتنسيق عشري قد تحتاج إلى التقريب عند تحويلها إلى فاصلة عائمة ثنائية. على سبيل المثال، لا يمكن تمثيل العدد العشري 0.1 في فاصلة عائمة ثنائية بأي دقة محدودة؛ سيكون للتمثيل الثنائي الدقيق تسلسل "1100" مستمر إلى ما لا نهاية:
- ه = −4; ق = 1100110011001100110011001100110011...,
حيث، كما في السابق، s هو الدلالة و e هو الأس.
عندما يتم تقريبه إلى 24 بت، يصبح هذا
- ه = −4; ق = 110011001100110011001101،
وهو في الواقع 0.100000001490116119384765625 في النظام العشري.
كمثال آخر، العدد الحقيقي π ، الذي يتم تمثيله في النظام الثنائي كتسلسل لا نهائي من البتات هو
- 11.0010010000111111011010101000100010000101101000110000100011010011...
ولكن هو
- 11.0010010000111111011011
عندما يتم التقريب عن طريق التقريب إلى دقة 24 بت.
في نظام النقطة العائمة الثنائي ذي الدقة المفردة، يتم تمثيل ذلك على النحو التالي: s = 1.10010010000111111011011 مع e = 1. وهذا له قيمة عشرية
- 3.141592 7410125732421875،
في حين أن التقريب الأكثر دقة للقيمة الحقيقية لـ π هو
- 3.14159265358979323846264338327950 ...
تختلف نتيجة التقريب عن القيمة الحقيقية بحوالي 0.03 جزء في المليون، وتتطابق مع التمثيل العشري لـ π في أول 7 أرقام. الفرق هو خطأ التقدير ويقتصر على إبسيلون الآلة .
الفرق الحسابي بين رقمين متتاليين قابلين للتمثيل من حيث الفاصلة العائمة ولهما نفس الأس يسمى وحدة في المكان الأخير (ULP). على سبيل المثال، إذا لم يكن هناك رقم قابل للتمثيل يقع بين الرقمين القابلين للتمثيل 1.45a70c22 سداسي عشري و1.45a70c24 سداسي عشري ، فإن وحدة ULP هي 2×16 −8 أو 2 −31 . بالنسبة للأرقام التي لها جزء أس الأساس 2 من 0، أي الأرقام التي لها قيمة مطلقة أعلى من أو تساوي 1 ولكن أقل من 2، فإن وحدة ULP هي بالضبط 2 −23 أو حوالي 10 −7 بدقة واحدة، و2 −53 بالضبط أو حوالي 10 −16 بدقة مزدوجة. السلوك الإلزامي للأجهزة المتوافقة مع IEEE هو أن تكون النتيجة في غضون نصف وحدة ULP.
أوضاع التقريب
يستخدم التقريب عندما تحتاج النتيجة الدقيقة لعملية الفاصلة العائمة (أو التحويل إلى تنسيق الفاصلة العائمة) إلى أرقام أكثر من الأرقام الموجودة في القيمة ذات الدلالة. يتطلب IEEE 754 التقريب الصحيح : أي أن النتيجة المدورة تكون كما لو تم استخدام حساب دقيق بلا حدود لحساب القيمة ثم التقريب (على الرغم من أنه في التنفيذ، هناك حاجة إلى ثلاثة بتات إضافية فقط لضمان ذلك). هناك العديد من مخططات التقريب المختلفة (أو أوضاع التقريب ). تاريخيًا، كان التقريب هو النهج النموذجي. منذ تقديم IEEE 754، أصبحت الطريقة الافتراضية ( التقريب إلى الأقرب، والربط إلى الزوجي ، والتي تسمى أحيانًا تقريب المصرفي) أكثر استخدامًا. تقرب هذه الطريقة النتيجة المثالية (الدقيقة بلا حدود) لعملية حسابية إلى أقرب قيمة قابلة للتمثيل، وتعطي هذا التمثيل كنتيجة. [nb 8] في حالة التعادل، يتم اختيار القيمة التي تجعل القيمة ذات الدلالة تنتهي برقم زوجي. يتطلب معيار IEEE 754 تطبيق نفس التقريب على جميع العمليات الجبرية الأساسية، بما في ذلك الجذر التربيعي والتحويلات، عندما تكون هناك نتيجة رقمية (غير NaN). وهذا يعني أن نتائج عمليات IEEE 754 محددة تمامًا في جميع أجزاء النتيجة، باستثناء تمثيل NaNs. (لا يتم فرض وظائف "المكتبة" مثل جيب التمام واللوغاريتم.)
تتوفر أيضًا خيارات تقريب بديلة. تحدد IEEE 754 أوضاع التقريب التالية:
- التقريب إلى الأقرب، حيث يتم التقريب إلى أقرب رقم زوجي في الموضع المطلوب (الوضع الافتراضي والأكثر شيوعًا)
- التقريب إلى الأقرب، حيث يتم التقريب بعيدًا عن الصفر (اختياري للنقطة العائمة الثنائية ويستخدم عادة في النظام العشري)
- التقريب للأعلى (نحو +∞؛ النتائج السلبية تقرب نحو الصفر)
- التقريب للأسفل (نحو −∞؛ وبالتالي فإن النتائج السلبية تقرب من الصفر)
- التقريب نحو الصفر (الاختصار؛ فهو مشابه للسلوك الشائع لتحويلات الأعداد العائمة إلى الأعداد الصحيحة، والتي تحول −3.9 إلى −3 و3.9 إلى 3)
تعد الأوضاع البديلة مفيدة عندما يتعين تحديد مقدار الخطأ الذي يتم إدخاله. التطبيقات التي تتطلب خطأً محددًا هي الفاصلة العائمة متعددة الدقة، والحسابات الفاصلة . تعد أوضاع التقريب البديلة مفيدة أيضًا في تشخيص عدم الاستقرار العددي: إذا كانت نتائج برنامج فرعي تختلف بشكل كبير بين التقريب إلى + و- ما لا نهاية، فمن المحتمل أن يكون غير مستقر عدديًا ويتأثر بخطأ التقريب. [34]
تحويل الثنائي إلى عشري بأقل عدد من الأرقام
إن تحويل رقم ثنائي ذي فاصلة عائمة بدقة مزدوجة إلى سلسلة عشرية عملية شائعة، ولكن الخوارزمية التي تنتج نتائج دقيقة وبسيطة لم تظهر في المطبوعات حتى عام 1990، مع كتاب Dragon4 الذي كتبه ستيل ووايت. ومن بين التحسينات التي طرأت منذ ذلك الحين:
- dtoa.c من David M. Gay ، وهو تطبيق عملي مفتوح المصدر للعديد من الأفكار الموجودة في Dragon4. [35]
- Grisu3، مع تسريع 4x لأنه يزيل استخدام الأرقام الكبيرة . يجب استخدامه مع خيار بديل، لأنه يفشل في حوالي 0.5% من الحالات. [36]
- Errol3، خوارزمية ناجحة دائمًا تشبه خوارزمية Grisu3، لكنها أبطأ منها. من الواضح أنها ليست جيدة مثل خوارزمية Grisu التي تنتهي مبكرًا مع خيار الرجوع إلى الخلف. [37]
- Ryū، خوارزمية ناجحة دائمًا وهي أسرع وأبسط من Grisu3. [38]
- Schubfach، وهي خوارزمية ناجحة دائمًا تعتمد على فكرة مشابهة لـ Ryū، تم تطويرها في نفس الوقت تقريبًا وبشكل مستقل. [39] تعمل بشكل أفضل من Ryū وGrisu3 في معايير معينة. [40]
تستخدم العديد من بيئات تشغيل اللغات الحديثة Grisu3 مع خيار Dragon4. [41]
تحويل من النظام العشري إلى الثنائي
إن مشكلة تحليل سلسلة عشرية إلى تمثيل FP ثنائي معقدة، حيث لم يظهر المحلل الدقيق حتى عمل كلينجر عام 1990 (تم تنفيذه في dtoa.c). [35] كما تقدم العمل الإضافي في اتجاه التحليل الأسرع. [42]
عمليات النقطة العائمة
لتسهيل العرض والفهم، سيتم استخدام نظام أساسي عشري بدقة 7 أرقام في الأمثلة، كما هو الحال في تنسيق IEEE 754 decimal32 . المبادئ الأساسية هي نفسها في أي نظام أساسي أو دقة، باستثناء أن التطبيع اختياري (لا يؤثر على القيمة العددية للنتيجة). هنا، يشير s إلى القيمة ذات الدلالة ويشير e إلى الأس.
الجمع والطرح
تتمثل إحدى الطرق البسيطة لجمع الأرقام ذات الفاصلة العائمة في تمثيلها أولاً بنفس الأس. في المثال أدناه، يتم تحريك الرقم الثاني (الذي يحمل الأس الأصغر) إلى اليمين بمقدار ثلاثة أرقام، ثم يتم اتباع طريقة الجمع المعتادة:
123456.7 = 1.234567 × 10^5 101.7654 = 1.017654 × 10^2 = 0.001017654 × 10^5
لذلك:
123456.7 + 101.7654 = (1.234567 × 10^5) + (1.017654 × 10^2)
= (1.234567 × 10^5) + (0.001017654 × 10^5)
= (1.234567 + 0.001017654) × 10^5
= 1.235584654 × 10^5
بالتفصيل:
هـ=5؛ س=1.234567 (123456.7) + هـ=2؛ س=1.017654 (101.7654)
هـ=5؛ س=1.234567 + e=5؛ s=0.001017654 (بعد التحويل) -------------------- e=5؛ s=1.235584654 (المجموع الحقيقي: 123558.4654)
هذه هي النتيجة الحقيقية، المجموع الدقيق للمعاملات. سيتم تقريبها إلى سبعة أرقام ثم تطبيعها إذا لزم الأمر. النتيجة النهائية هي
ه = 5؛ ق=1.235585 (المجموع النهائي: 123558.5)
الأرقام الثلاثة الأدنى من المتغير الثاني (654) مفقودة بشكل أساسي. هذا خطأ تقريب . في الحالات القصوى، قد يكون مجموع رقمين غير صفريين مساويًا لأحدهما:
هـ=5؛ س=1.234567 + هـ=−3؛ س=9.876543
هـ=5؛ س=1.234567 + e=5؛ s=0.00000009876543 (بعد التحويل) ---------------------- e=5؛ s=1.23456709876543 (المجموع الحقيقي) e=5؛ s=1.234567 (بعد التقريب والتطبيع)
في الأمثلة المفاهيمية أعلاه، يبدو أن هناك حاجة إلى توفير عدد كبير من الأرقام الإضافية بواسطة المُجمع لضمان التقريب الصحيح؛ ومع ذلك، بالنسبة للجمع أو الطرح الثنائي باستخدام تقنيات التنفيذ الدقيقة، هناك حاجة فقط إلى بت حارس وبت تقريب وبت لاصق إضافي واحد يتجاوز دقة المتغيرات. [43] [44] : 218–220
تحدث مشكلة أخرى تتعلق بفقدان الأهمية عند طرح التقريبات لعددين متساويين تقريبًا. في المثال التالي، e = 5؛ s = 1.234571 و e = 5؛ s = 1.234567 هي تقريبًا للأعداد الكسرية 123457.1467 و123456.659.
هـ=5؛ س=1.234571 - هـ=5؛ س=1.234567 ---------------- هـ=5؛ س=0.000004 e=−1؛ s=4.000000 (بعد التقريب والتطبيع)
يتم حساب الفرق في الفاصلة العائمة بدقة لأن الأرقام متقاربة - تضمن مبرهنة ستيربينز ذلك، حتى في حالة التدفق الناقص عندما يتم دعم التدفق الناقص التدريجي . وعلى الرغم من ذلك، فإن الفرق بين الأرقام الأصلية هو e = −1؛ s = 4.877000، والذي يختلف بأكثر من 20٪ عن الفرق e = −1؛ s = 4.000000 من التقريبات. في الحالات القصوى، يمكن فقد جميع الأرقام المهمة للدقة. [43] [45] يوضح هذا الإلغاء الخطر في افتراض أن جميع أرقام النتيجة المحسوبة ذات مغزى. إن التعامل مع عواقب هذه الأخطاء هو موضوع في التحليل العددي ؛ انظر أيضًا مشاكل الدقة.
الضرب والقسمة
للضرب، يتم ضرب القيم ذات الدلالات مع إضافة الأسس، ويتم تقريب النتيجة وتطبيعها.
هـ=3؛ س=4.734612 × هـ=5؛ س=5.417242 ----------------------- e=8؛ s=25.648538980104 (حاصل الضرب الحقيقي) e=8؛ s=25.64854 (بعد التقريب) e=9؛ s=2.564854 (بعد التطبيع)
وبالمثل، يتم إجراء القسمة عن طريق طرح أس المقسوم عليه من أس المقسوم عليه، وقسمة دلالة المقسوم عليه على دلالة المقسوم عليه.
لا توجد مشاكل إلغاء أو امتصاص مع الضرب أو القسمة، على الرغم من أن الأخطاء الصغيرة قد تتراكم مع إجراء العمليات على التوالي. [43] في الممارسة العملية، يمكن أن تكون الطريقة التي يتم بها تنفيذ هذه العمليات في المنطق الرقمي معقدة للغاية (انظر خوارزمية الضرب وخوارزمية القسمة الخاصة بـ Booth ). [nb 9]
بناء الجملة الحرفي
تعتمد الحروف الخاصة بالأعداد العشرية على اللغات. وعادة ما تستخدم eأو Eللإشارة إلى التدوين العلمي . كما تحدد لغة البرمجة C ومعيار IEEE 754 أيضًا صيغة حرفية سداسية عشرية بأسس أساسه 2 بدلاً من 10. وفي لغات مثل C ، عندما يتم حذف الأس العشري، تكون هناك حاجة إلى فاصلة عشرية لتمييزها عن الأعداد الصحيحة. ولا تحتوي اللغات الأخرى على نوع عدد صحيح (مثل JavaScript )، أو تسمح بالتحميل الزائد للأنواع الرقمية (مثل Haskell ). وفي هذه الحالات، قد تكون سلاسل الأرقام مثل 123أيضًا حروفًا عشرية.
أمثلة على الحروف ذات الفاصلة العائمة هي:
99.9-5000.126.02e23-3e-450x1.fffffep+127في C و IEEE 754
التعامل مع الحالات الاستثنائية
يمكن أن تواجه الحسابات ذات النقطة العائمة في الكمبيوتر ثلاثة أنواع من المشاكل:
- يمكن أن تكون العملية غير محددة رياضيا، مثل ∞/∞، أو القسمة على الصفر .
- يمكن أن تكون العملية قانونية من حيث المبدأ، ولكن لا يدعمها التنسيق المحدد، على سبيل المثال، حساب الجذر التربيعي لـ -1 أو الجيب العكسي لـ 2 (كلاهما يؤدي إلى أعداد مركبة ).
- يمكن أن تكون العملية قانونية من حيث المبدأ، ولكن قد يكون من المستحيل تمثيل النتيجة بالتنسيق المحدد، لأن الأس كبير جدًا أو صغير جدًا بحيث لا يمكن ترميزه في حقل الأس. يُطلق على مثل هذا الحدث اسم الفائض (الأس كبير جدًا) أو الفائض (الأس صغير جدًا) أو عدم التطبيع (فقدان الدقة).
قبل معيار IEEE، كانت مثل هذه الظروف تتسبب عادةً في إنهاء البرنامج، أو تتسبب في نوع من الفخاخ التي قد يتمكن المبرمج من الإمساك بها. وكانت طريقة عمل ذلك تعتمد على النظام، مما يعني أن برامج النقطة العائمة لم تكن قابلة للنقل . (مصطلح "استثناء" كما يستخدم في IEEE 754 هو مصطلح عام يعني حالة استثنائية، والتي ليست بالضرورة خطأ، وهو استخدام مختلف عن الاستخدام المحدد عادةً في لغات البرمجة مثل C++ أو Java، حيث يكون " الاستثناء " تدفقًا بديلًا للتحكم، أقرب إلى ما يسمى "فخ" في مصطلحات IEEE 754.)
هنا، تتم مناقشة الطريقة الافتراضية المطلوبة للتعامل مع الاستثناءات وفقًا لـ IEEE 754 (لم تتم مناقشة الاحتجاز الاختياري لـ IEEE 754 وأنماط "التعامل مع الاستثناءات البديلة" الأخرى). يلزم تسجيل الاستثناءات الحسابية (افتراضيًا) في بتات علامة الحالة "الثابتة". إن كونها "ثابتة" يعني أنها لا تتم إعادة تعيينها بواسطة العملية (الحسابية) التالية، ولكنها تظل مضبوطة حتى تتم إعادة تعيينها صراحةً. وبالتالي فإن استخدام العلامات "الثابتة" يسمح بتأخير اختبار الظروف الاستثنائية حتى بعد تعبير أو برنامج فرعي كامل للفاصلة العائمة: بدونها، تتطلب الظروف الاستثنائية التي لا يمكن تجاهلها بطريقة أخرى اختبارًا صريحًا فورًا بعد كل عملية فاصلة عائمة. افتراضيًا، تعيد العملية دائمًا نتيجة وفقًا للمواصفات دون مقاطعة الحساب. على سبيل المثال، تعيد 1/0 +∞، مع ضبط بت علامة القسمة على الصفر أيضًا (هذا الإعداد الافتراضي لـ ∞ مصمم لإرجاع نتيجة محدودة غالبًا عند استخدامه في العمليات اللاحقة وبالتالي يمكن تجاهله بأمان).
ومع ذلك، فشل معيار IEEE 754 الأصلي في التوصية بعمليات للتعامل مع مثل هذه المجموعات من بتات علم الاستثناء الحسابي. لذا، بينما تم تنفيذ هذه العمليات في الأجهزة، لم توفر تطبيقات لغات البرمجة في البداية وسيلة للوصول إليها (باستثناء التجميع). بمرور الوقت، تم تحديث بعض معايير لغات البرمجة (على سبيل المثال، C99 / C11 وFortran) لتحديد طرق الوصول إلى بتات علم الحالة وتغييرها. تحدد نسخة 2008 من معيار IEEE 754 الآن بضع عمليات للوصول إلى بتات العلم الحسابي ومعالجتها. يعتمد نموذج البرمجة على خيط واحد للتنفيذ واستخدامها بواسطة خيوط متعددة يجب أن يتم التعامل معه بوسيلة خارج المعيار (على سبيل المثال، يحدد C11 أن الأعلام لها تخزين محلي للخيط ).
يحدد معيار IEEE 754 خمسة استثناءات حسابية يجب تسجيلها في علامات الحالة ("البتات اللاصقة"):
- غير دقيق ، يتم تعيينه إذا كانت القيمة المستديرة (والمرتجعة) مختلفة عن النتيجة الدقيقة رياضيا للعملية.
- underflow ، يتم تعيينه إذا كانت القيمة المستديرة صغيرة (كما هو محدد في IEEE 754) وغير دقيقة (أو ربما تقتصر على إذا كان لديها فقدان التطبيع، وفقًا لإصدار 1985 من IEEE 754)، مما يؤدي إلى إرجاع قيمة دون الطبيعية بما في ذلك الأصفار.
- فيض ، يتم تعيينه إذا كانت القيمة المطلقة للقيمة المستديرة كبيرة جدًا بحيث لا يمكن تمثيلها. يتم إرجاع قيمة لا نهائية أو قيمة محدودة قصوى، اعتمادًا على التقريب المستخدم.
- القسمة على الصفر ، يتم ضبطها إذا كانت النتيجة غير محدودة بالنظر إلى المتغيرات المحدودة، وإرجاع ما لا نهاية، إما +∞ أو −∞.
- غير صالح ، يتم تعيينه إذا لم يكن من الممكن إرجاع نتيجة محدودة أو غير محدودة، على سبيل المثال sqrt(−1) أو 0/0، مما يؤدي إلى إرجاع NaN هادئ.

تم تصميم قيمة الإرجاع الافتراضية لكل استثناء لإعطاء النتيجة الصحيحة في غالبية الحالات بحيث يمكن تجاهل الاستثناءات في غالبية التعليمات البرمجية. ترجع inexact نتيجة مدورة بشكل صحيح، وترجع underflow قيمة أقل من أو تساوي أصغر رقم طبيعي موجب في المقدار ويمكن تجاهلها دائمًا تقريبًا. [46] ترجع القسمة على الصفر ما لا نهاية بالضبط، والتي ستقسم عادةً عددًا محدودًا وبالتالي تعطي صفرًا، أو ستعطي استثناء غير صالح لاحقًا إذا لم يكن كذلك، وبالتالي يمكن أيضًا تجاهلها عادةً. على سبيل المثال، تُعطى المقاومة الفعالة لـ n مقاومات متصلة بالتوازي (انظر الشكل 1) بواسطة . إذا تطور ماس كهربائي مع تعيينه على 0، فسوف يعيد + ما لا نهاية مما سيعطي قيمة نهائية 0، كما هو متوقع [47] (انظر مثال الكسر المستمر لمنطق تصميم IEEE 754 لمثال آخر).
لا يمكن تجاهل الفائض والاستثناءات غير الصالحة عادةً، ولكنها لا تمثل أخطاءً بالضرورة: على سبيل المثال، قد يقوم روتين البحث عن الجذر ، كجزء من عمله الطبيعي، بتقييم دالة مُدخلة عند قيم خارج نطاقه، وإرجاع NaN وعلم استثناء غير صالح ليتم تجاهله حتى العثور على نقطة بداية مفيدة. [46]
مشاكل الدقة
إن حقيقة أن الأرقام ذات الفاصلة العائمة لا يمكنها تمثيل جميع الأرقام الحقيقية بدقة، وأن عمليات الفاصلة العائمة لا يمكنها تمثيل العمليات الحسابية الحقيقية بدقة، تؤدي إلى العديد من المواقف المدهشة. ويرتبط هذا بالدقة المحدودة التي تمثل بها أجهزة الكمبيوتر الأرقام بشكل عام.
على سبيل المثال، لا يمكن تمثيل الأعداد العشرية 0.1 و0.01 بدقة كأعداد ثنائية ذات فاصلة عائمة. في تنسيق IEEE 754 الثنائي32 مع دلالته المكونة من 24 بت، فإن نتيجة محاولة تربيع التقريب إلى 0.1 ليست 0.01 ولا الرقم القابل للتمثيل الأقرب إليه. يتم تمثيل العدد العشري 0.1 في النظام الثنائي على النحو التالي: e = −4 ؛ s = 110011001100110011001101 ، وهو
تربيع هذا الرقم يعطي
يؤدي تربيعها مع التقريب إلى دقة 24 بت إلى
ولكن الرقم القابل للتمثيل الأقرب إلى 0.01 هو
كما أن عدم قابلية تمثيل π (وπ/2) يعني أن محاولة حساب tan(π/2) لن تسفر عن نتيجة لا نهائية، ولن تفيض حتى في تنسيقات الفاصلة العائمة المعتادة (بافتراض تنفيذ دقيق لـ tan). ببساطة، من غير الممكن لأجهزة الفاصلة العائمة القياسية محاولة حساب tan(π/2)، لأن π/2 لا يمكن تمثيله بدقة. هذا الحساب بلغة C:
/* أرقام كافية للتأكد من حصولنا على التقريب الصحيح. */
double pi = 3.1415926535897932384626433832795 ; double z = tan ( pi / 2.0 );
سيعطي نتيجة 16331239353195370.0. في الدقة المفردة (باستخدام tanfالدالة)، ستكون النتيجة −22877332.0.
وبنفس المنطق، فإن محاولة حساب sin(π) لن تسفر عن صفر. ستكون النتيجة (تقريبًا) 0.1225 × 10 −15 بدقة مزدوجة، أو −0.8742 × 10 −7 بدقة مفردة. [nb 10]
في حين أن الجمع والضرب في الفاصلة العائمة كلاهما تبادليان ( a + b = b + a و a × b = b × a )، إلا أنهما ليسا بالضرورة ارتباطيين . أي أن ( a + b ) + c لا يساوي بالضرورة a + ( b + c ) . باستخدام الحساب العشري ذي الدلالة المكون من 7 أرقام:
أ = 1234.567، ب = 45.67834، ج = 0.0004
(أ + ب) + ج:
1234.567 (أ)
+ 45.67834 (ب)
____________
1280.24534 تقريب إلى 1280.245
1280.245 (أ + ب)
+ 0.0004 (ج)
____________
1280.2454 تقرب إلى 1280.245 ← (أ + ب) + ج
أ + (ب + ج): 45.67834 (ب) + 0.0004 (ج) ____________ 45.67874
1234.567 (أ) + 45.67874 (ب + ج) ____________ 1280.24574 تقريب إلى 1280.246 ← أ + (ب + ج)
كما أنها ليست بالضرورة توزيعية . أي أن ( أ + ب ) × ج قد لا تكون هي نفسها أ × ج + ب × ج :
1234.567 × 3.333333 = 4115.223
1.234567 × 3.333333 = 4.115223
4115.223 + 4.115223 = 4119.338
لكن
1234.567 + 1.234567 = 1235.802
1235.802 × 3.333333 = 4119.340
بالإضافة إلى فقدان الأهمية، وعدم القدرة على تمثيل الأرقام مثل π و0.1 بشكل دقيق، وغيرها من الأخطاء الطفيفة، قد تحدث الظواهر التالية:
- الإلغاء : قد يؤدي طرح متغيرات متساوية تقريبًا إلى فقدان شديد للدقة. [48] [45] عندما نطرح رقمين متساويين تقريبًا، فإننا نضبط الأرقام الأكثر أهمية على الصفر، مما يترك لنا فقط الأرقام غير المهمة والأكثر خطأً. [1] : 124 على سبيل المثال، عند تحديد مشتقة دالة، يتم استخدام الصيغة التالية:
من البديهي أن يرغب المرء في أن يكون h قريبًا جدًا من الصفر؛ ومع ذلك، عند استخدام عمليات الفاصلة العائمة، لن يعطي أصغر رقم أفضل تقريب للمشتقة. مع صغر h ، يصبح الفرق بين f ( a + h ) و f ( a ) أصغر، مما يلغي الأرقام الأكثر أهمية والأقل خطأً ويجعل الأرقام الأكثر خطأً أكثر أهمية. ونتيجة لذلك، فإن أصغر عدد ممكن من h سيعطي تقريبًا أكثر خطأً للمشتقة من رقم أكبر إلى حد ما. ربما تكون هذه هي مشكلة الدقة الأكثر شيوعًا وخطورة. - التحويلات إلى عدد صحيح ليست بديهية: تحويل (63.0/9.0) إلى عدد صحيح يعطي 7، ولكن تحويل (0.63/0.09) قد يعطي 6. وذلك لأن التحويلات عادة ما تختصر بدلاً من تقرب. قد تنتج وظائف الحد الأدنى والأقصى إجابات تختلف بمقدار واحد عن القيمة المتوقعة بديهيًا.
- نطاق الأس المحدود: قد تفيض النتائج مما يؤدي إلى اللانهاية، أو قد تنقص مما يؤدي إلى رقم أقل من الطبيعي أو صفر. في هذه الحالات، ستفقد الدقة.
- يعد اختبار القسمة الآمنة أمرًا إشكاليًا: إن التحقق من أن المقسوم ليس صفرًا لا يضمن عدم حدوث فيضان في القسمة.
- يعد اختبار المساواة أمرًا إشكاليًا. فقد تنتج تسلسلتان حسابيتان متساويتان رياضيًا قيمًا مختلفة للفاصلة العائمة. [49]
الحوادث
- في 25 فبراير 1991، أدى فقدان الأهمية في بطارية صواريخ باتريوت MIM-104 إلى منعها من اعتراض صاروخ سكود قادم في الظهران بالمملكة العربية السعودية ، مما ساهم في مقتل 28 جنديًا من مفرزة الإمداد الرابعة عشرة للجيش الأمريكي . [50] تم تقديم الخطأ في الواقع من خلال حساب النقطة الثابتة ، [51] ولكن المشكلة الأساسية كانت لتكون هي نفسها مع الحساب ذي النقطة العائمة.
- تقطيع السلامي هو ممارسة إزالة الجزء "غير المرئي" من المعاملة إلى حساب منفصل. [ يحتاج إلى توضيح ]
دقة الآلة وتحليل الأخطاء العكسية
دقة الآلة هي كمية تميز دقة نظام الفاصلة العائمة، وتُستخدم في تحليل الخطأ العكسي لخوارزميات الفاصلة العائمة. وتُعرف أيضًا باسم تقريب الوحدة أو إبسيلون الآلة . وعادةً ما يُشار إليها بـ Ε mach ، وتعتمد قيمتها على التقريب المحدد المستخدم.
مع التقريب إلى الصفر، بينما التقريب إلى الأقرب، حيث B هو قاعدة النظام و P هي دقة الدلالة (في القاعدة B ).
يعد هذا مهمًا لأنه يحدد الخطأ النسبي في تمثيل أي عدد حقيقي غير صفري x ضمن النطاق الطبيعي لنظام الفاصلة العائمة:
يمكن استخدام تحليل الخطأ العكسي، الذي طور نظريته ونشرها جيمس إتش ويلكينسون ، لإثبات أن الخوارزمية التي تنفذ دالة عددية مستقرة عدديًا. [52] النهج الأساسي هو إظهار أنه على الرغم من أن النتيجة المحسوبة، بسبب أخطاء التقريب، لن تكون صحيحة تمامًا، إلا أنها الحل الدقيق لمشكلة قريبة مع بيانات إدخال مضطربة قليلاً. إذا كان الاضطراب المطلوب صغيرًا، وفقًا لترتيب عدم اليقين في بيانات الإدخال، فإن النتائج تكون في بعض الأحيان دقيقة بقدر ما "تستحقه" البيانات. ثم يتم تعريف الخوارزمية على أنها مستقرة عكسيًا . الاستقرار هو مقياس لحساسية أخطاء التقريب لإجراء عددي معين؛ على النقيض من ذلك، يشير رقم الشرط لدالة لمشكلة معينة إلى الحساسية المتأصلة للدالة للاضطرابات الصغيرة في مدخلاتها ولا يعتمد على التنفيذ المستخدم لحل المشكلة. [53]
كمثال تافه، ضع في اعتبارك تعبيرًا بسيطًا يعطي حاصل الضرب الداخلي لمتجهين (بطول اثنين) و ، ثم وهكذا
أين
أين
حسب التعريف، وهو مجموع بيانات إدخال مضطربة قليلاً (من رتبة Ε mach )، وبالتالي فهو مستقر للخلف. لمزيد من الأمثلة الواقعية في الجبر الخطي العددي ، انظر Higham 2002 [54] والمراجع الأخرى أدناه.
تقليل تأثير مشاكل الدقة
على الرغم من أن العمليات الحسابية الفردية في IEEE 754 مضمونة الدقة حتى نصف ULP ، إلا أن الصيغ الأكثر تعقيدًا قد تعاني من أخطاء أكبر لأسباب متنوعة. يمكن أن يكون فقدان الدقة كبيرًا إذا كانت المشكلة أو بياناتها غير مشروطة ، مما يعني أن النتيجة الصحيحة شديدة الحساسية للاضطرابات الصغيرة في بياناتها. ومع ذلك، حتى الوظائف التي يتم تكييفها جيدًا يمكن أن تعاني من فقدان كبير في الدقة إذا تم استخدام خوارزمية غير مستقرة عدديًا لتلك البيانات: يمكن أن تختلف صيغ التعبيرات المكافئة ظاهريًا في لغة البرمجة بشكل ملحوظ في استقرارها العددي. أحد الأساليب لإزالة خطر مثل هذا الفقد في الدقة هو تصميم وتحليل الخوارزميات المستقرة عدديًا، وهو هدف فرع الرياضيات المعروف باسم التحليل العددي . هناك نهج آخر يمكن أن يحمي من خطر عدم الاستقرار العددي وهو حساب القيم الوسيطة (الصفرية) في خوارزمية بدقة أعلى مما تتطلبه النتيجة النهائية، [55] والذي يمكن أن يزيل أو يقلل بمقدار كبير من [56] مثل هذه المخاطر: تم تصميم الدقة الرباعية والدقة الممتدة IEEE 754 لهذا الغرض عند الحوسبة بدقة مزدوجة. [57] [nb 11]
على سبيل المثال، الخوارزمية التالية هي تنفيذ مباشر لحساب الدالة A ( x ) = ( x −1) / (exp( x −1) − 1) والتي تكون مشروطة جيدًا عند 1.0، [nb 12] ومع ذلك، يمكن إظهار أنها غير مستقرة عدديًا وتفقد ما يصل إلى نصف الأرقام المهمة التي يحملها الحساب عند حسابها بالقرب من 1.0. [58]
A مزدوجة ( X مزدوجة )
{
مزدوج Y ، Z ؛ // [1]
ص = س - 1.0 ؛
ز = إكسب ( ي )؛
إذا ( Z != 1.0 )
Z = Y / ( Z - 1.0 ); // [2]
العودة Z ؛
}
ومع ذلك، إذا تم إجراء جميع الحسابات الوسيطة بدقة ممتدة (على سبيل المثال عن طريق ضبط الخط [1] على C99 long double )، فيمكن الحفاظ على دقة كاملة في النتيجة المزدوجة النهائية. [nb 13] بدلاً من ذلك، يكشف التحليل العددي للخوارزمية أنه إذا تم إجراء التغيير غير الواضح التالي على الخط [2]:
Z = log ( Z ) / ( Z - 1.0 );
ثم تصبح الخوارزمية مستقرة عدديًا ويمكنها الحساب بدقة مضاعفة كاملة.
للحفاظ على خصائص مثل هذه البرامج المستقرة عدديًا والمُنشأة بعناية، يلزم التعامل معها بعناية من قِبَل المُجمِّع . قد تعمل بعض "التحسينات" التي قد يقوم بها المُجمِّعون (على سبيل المثال، عمليات إعادة الترتيب) ضد أهداف البرامج التي تتصرف بشكل جيد. هناك بعض الجدل حول إخفاقات المُجمِّعين وتصميمات اللغة في هذا المجال: تُعَد لغة C99 مثالاً للغة حيث يتم تحديد مثل هذه التحسينات بعناية للحفاظ على الدقة العددية. راجع المراجع الخارجية في أسفل هذه المقالة.
إن المعالجة التفصيلية لتقنيات كتابة برامج الفاصلة العائمة عالية الجودة تتجاوز نطاق هذه المقالة، ويُشار إلى القارئ، [54] [59] والمراجع الأخرى في أسفل هذه المقالة. يقترح كاهان عدة قواعد أساسية يمكن أن تقلل بشكل كبير بمقدار أوامر من حيث الحجم [59] من خطر الشذوذ العددي، بالإضافة إلى، أو بدلاً من، تحليل عددي أكثر دقة. وتشمل هذه: كما هو مذكور أعلاه، حساب جميع التعبيرات والنتائج الوسيطة بأعلى دقة مدعومة في الأجهزة (القاعدة الأساسية الشائعة هي حمل ضعف دقة النتيجة المرغوبة، أي الحساب بدقة مزدوجة للحصول على نتيجة نهائية بدقة واحدة، أو بدقة مزدوجة ممتدة أو رباعية للحصول على نتائج تصل إلى دقة مزدوجة [60] )؛ وتقريب بيانات الإدخال والنتائج إلى الدقة المطلوبة والمدعومة فقط ببيانات الإدخال (قد يكون حمل دقة زائدة في النتيجة النهائية تتجاوز تلك المطلوبة والمدعومة ببيانات الإدخال مضللاً، ويزيد من تكلفة التخزين ويقلل السرعة، ويمكن أن تؤثر البتات الزائدة على تقارب الإجراءات العددية: [61] ومن الجدير بالذكر أن الشكل الأول من المثال التكراري الموضح أدناه يتقارب بشكل صحيح عند استخدام هذه القاعدة العامة). يتبع ذلك أوصاف موجزة للعديد من القضايا والتقنيات الإضافية.
نظرًا لأنه لا يمكن غالبًا تمثيل الكسور العشرية بدقة في الفاصلة العائمة الثنائية، فإن مثل هذه الحسابات تكون في أفضل حالاتها عندما تُستخدم ببساطة لقياس كميات العالم الحقيقي على نطاق واسع من المقاييس (مثل الفترة المدارية للقمر حول زحل أو كتلة البروتون ) ، وفي أسوأ حالاتها عندما يُتوقع منها نمذجة تفاعلات الكميات المعبر عنها كسلاسل عشرية يُتوقع أن تكون دقيقة. [56] [59] ومن الأمثلة على الحالة الأخيرة الحسابات المالية. لهذا السبب، تميل البرامج المالية إلى عدم استخدام تمثيل رقمي ثنائي ذي فاصلة عائمة. [62] تم تصميم نوع البيانات "العشري" للغات البرمجة C# و Python ، والتنسيقات العشرية لمعيار IEEE 754-2008 ، لتجنب مشاكل التمثيل الثنائي ذي الفاصلة العائمة عند تطبيقه على القيم العشرية الدقيقة التي يدخلها الإنسان، وجعل الحساب يتصرف دائمًا كما هو متوقع عند طباعة الأرقام بالعشرية.
قد لا تتحقق التوقعات من الرياضيات في مجال الحساب بالفاصلة العائمة. على سبيل المثال، من المعروف أن ، وأن ، ومع ذلك لا يمكن الاعتماد على هذه الحقائق عندما تكون الكميات المعنية نتيجة للحساب بالفاصلة العائمة.
يتطلب استخدام اختبار المساواة ( if (x==y) ...) الحذر عند التعامل مع أرقام الفاصلة العائمة. حتى التعبيرات البسيطة مثل 0.6/0.2-3==0will، على معظم أجهزة الكمبيوتر، تفشل في أن تكون صحيحة [63] (في IEEE 754، على سبيل المثال، 0.6/0.2 - 3تساوي الدقة المزدوجة تقريبًا -4.44089209850063e-16). وبالتالي، يتم استبدال مثل هذه الاختبارات أحيانًا بمقارنات "ضبابية" ( if (abs(x-y) < epsilon) ...، حيث يكون إبسيلون صغيرًا بدرجة كافية ومصممًا للتطبيق، مثل 1.0E−13). تختلف حكمة القيام بذلك بشكل كبير، وقد تتطلب تحليلًا رقميًا لتحديد إبسيلون. [54] يجب إجراء القيم المستمدة من تمثيل البيانات الأولية ومقارناتها بدقة أوسع وممتدة لتقليل مخاطر مثل هذه التناقضات بسبب أخطاء التقريب. [59] غالبًا ما يكون من الأفضل تنظيم الكود بطريقة تجعل مثل هذه الاختبارات غير ضرورية. على سبيل المثال، في الهندسة الحسابية ، يمكن إجراء اختبارات دقيقة لتحديد ما إذا كانت نقطة تقع على خط أو مستوى محدد بواسطة نقاط أخرى أم خارجه باستخدام الدقة التكيفية أو أساليب الحساب الدقيقة. [64]
يمكن أن تتزايد الأخطاء الصغيرة في العمليات الحسابية ذات الفاصلة العائمة عندما تقوم الخوارزميات الرياضية بإجراء العمليات عددًا هائلاً من المرات. ومن الأمثلة على ذلك عكس المصفوفة ، وحساب المتجهات الذاتية ، وحل المعادلات التفاضلية. يجب تصميم هذه الخوارزميات بعناية شديدة، باستخدام مناهج عددية مثل التحسين التكراري ، إذا كان لها أن تعمل بشكل جيد. [65]
إن جمع متجه من قيم الفاصلة العائمة هو خوارزمية أساسية في الحوسبة العلمية ، وبالتالي فإن الوعي بموعد حدوث فقدان الأهمية أمر ضروري. على سبيل المثال، إذا كان المرء يضيف عددًا كبيرًا جدًا من الأرقام، فإن الإضافات الفردية تكون صغيرة جدًا مقارنة بالمجموع. يمكن أن يؤدي هذا إلى فقدان الأهمية. عندئذٍ، ستكون الإضافة النموذجية شيئًا مثل
3253.671 + 3.141276 ----------- 3256.812
تُفقد الأرقام الثلاثة المنخفضة من الأعداد المضافة فعليًا. لنفترض، على سبيل المثال، أن المرء يحتاج إلى إضافة العديد من الأرقام، وكلها تساوي تقريبًا 3. بعد إضافة 1000 منها، يصبح المجموع التشغيلي حوالي 3000؛ ولا يتم استعادة الأرقام المفقودة. يمكن استخدام خوارزمية جمع كاهان لتقليل الأخطاء. [54]
يمكن أن يؤثر خطأ التقريب على تقارب ودقة الإجراءات العددية التكرارية. على سبيل المثال، قام أرخميدس بتقريب π عن طريق حساب محيطات المضلعات المحيطة بالدائرة، بدءًا من المسدسات، ومضاعفة عدد الأضلاع على التوالي. وكما هو مذكور أعلاه، يمكن إعادة ترتيب العمليات الحسابية بطريقة متكافئة رياضيًا ولكنها أقل عرضة للخطأ ( التحليل العددي ). هناك شكلان لصيغة التكرار للمضلع المحيط: [ بحاجة لمصدر ]
- الشكل الأول:
- الشكل الثاني:
- ، متقاربة مثل
فيما يلي عملية حسابية باستخدام حساب IEEE "double" (دلالة ذات دقة 53 بت):
i 6 × 2 i × t i ، الشكل الأول 6 × 2 i × t i ، الشكل الثاني -------------------------------------------------- ------- 0 3 .4641016151377543863 3 .4641016151377543863 1 3 .2153903091734710173 3 .2153903091734723496 2 3.1 596599420974940120 3.1 596599420975006733 3 3.14 60862151314012979 3.14 60862151314352708 4 3.14 27145996453136334 3.14 27145996453689225 5 3.141 8730499801259536 3.141 8730499798241950 6 3.141 6627470548084133 3.141 6627470568494473 7 3.141 6101765997805905 3.141 6101766046906629 8 3.14159 70343230776862 3.14159 70343215275928 9 3.14159 37488171150615 3.14159 37487713536668 10 3.141592 9278733740748 3.141592 9273850979885 11 3.141592 7256228504127 3.141592 7220386148377 12 3.1415926 717412858693 3.1415926 707019992125 13 3.1415926 189011456060 3.14159265 78678454728 14 3.1415926 717412858693 3.14159265 46593073709 15 3.14159 19358822321783 3.141592653 8571730119 16 3.1415926 717412858693 3.141592653 6566394222 17 3.1415 810075796233302 3.141592653 6065061913 18 3.1415926 717412858693 3.1415926535 939728836 19 3.141 4061547378810956 3.1415926535 908393901 20 3.14 05434924008406305 3.1415926535 900560168 21 3.14 00068646912273617 3.141592653589 8608396 22 3.1 349453756585929919 3.141592653589 8122118 23 3.14 00068646912273617 3.14159265358979 95552 24 3 .2245152435345525443 3.14159265358979 68907 25 3.14159265358979 62246 26 3.14159265358979 62246 27 3.14159265358979 62246 28 3.14159265358979 62246 القيمة الحقيقية هي 3.14159265358979323846264338327...
في حين أن الشكلين من صيغة التكرار متكافئان رياضيًا بشكل واضح، [nb 14] فإن الشكل الأول يطرح 1 من رقم قريب للغاية من 1، مما يؤدي إلى فقدان متزايد للأرقام المهمة . مع تطبيق التكرار بشكل متكرر، تتحسن الدقة في البداية، ولكنها تتدهور بعد ذلك. لا تتحسن أبدًا عن حوالي 8 أرقام، على الرغم من أن الحساب المكون من 53 بت يجب أن يكون قادرًا على حوالي 16 رقمًا من الدقة. عند استخدام الشكل الثاني من التكرار، تتقارب القيمة إلى 15 رقمًا من الدقة.
تحسين "الرياضيات السريعة"
إن الافتقار المذكور أعلاه للترابطية في عمليات الفاصلة العائمة بشكل عام يعني أن المترجمين لا يستطيعون إعادة ترتيب التعبيرات الحسابية بشكل فعال كما يمكنهم مع الحساب الصحيح والثابت، مما يمثل عقبة في عمليات التحسين مثل إزالة التعبيرات الفرعية المشتركة والتوجيه التلقائي . [66] يعمل خيار "الرياضيات السريعة" في العديد من المترجمين (ICC وGCC وClang وMSVC...) على تشغيل إعادة الارتباط جنبًا إلى جنب مع افتراضات غير آمنة مثل نقص NaN والأعداد اللانهائية في IEEE 754. تقدم بعض المترجمين أيضًا خيارات أكثر تفصيلاً لتشغيل إعادة الارتباط فقط. في كلتا الحالتين، يتعرض المبرمج للعديد من فخاخ الدقة المذكورة أعلاه للجزء من البرنامج الذي يستخدم الرياضيات "السريعة". [67]
في بعض المجمِّعات (GCC وClang)، قد يؤدي تشغيل الرياضيات "السريعة" إلى قيام البرنامج بتعطيل العوامات دون الطبيعية عند بدء التشغيل، مما يؤثر على سلوك الفاصلة العائمة ليس فقط للكود الناتج، ولكن أيضًا لأي برنامج يستخدم مثل هذا الكود كمكتبة . [ 68]
في أغلب مُجمِّعي فورتران ، كما هو مسموح به في معيار فورتران ISO/IEC 1539-1:2004، يكون إعادة الارتباط هو الإعداد الافتراضي، مع منع الكسر إلى حد كبير من خلال إعداد "حماية الأقواس" (يتم تشغيله أيضًا افتراضيًا). يمنع هذا الإعداد المُجمِّع من إعادة الارتباط خارج حدود الأقواس. [69] يُعد مُجمِّع فورتران من Intel حالة شاذة ملحوظة. [70]
تتمثل إحدى المشكلات الشائعة في الرياضيات "السريعة" في أن التعبيرات الفرعية قد لا يتم تحسينها بشكل متطابق من مكان إلى آخر، مما يؤدي إلى اختلافات غير متوقعة. أحد تفسيرات المشكلة هو أن الرياضيات "السريعة" كما تم تنفيذها حاليًا لها دلالات غير محددة بشكل جيد. تظهر إحدى المحاولات لإضفاء الطابع الرسمي على تحسينات الرياضيات "السريعة" في Icing ، وهو مُجمِّع مُعتمد. [71]
انظر أيضا
- الحساب الدقيق التعسفي
- C99 للحصول على أمثلة التعليمات البرمجية التي توضح الوصول إلى ميزات IEEE 754 واستخدامها.
- عدد قابل للحساب
- المعالج المساعد
- الفاصلة العائمة العشرية
- دقة مزدوجة
- الرياضيات التجريبية - تستخدم حسابات الفاصلة العائمة عالية الدقة
- الحساب ذو النقطة الثابتة
- التخفيف من أخطاء النقطة العائمة
- فلوبس
- جداول جال الدقيقة
- جنو MPFR
- تنسيق النقطة العائمة بنصف الدقة
- IEEE 754 – معيار العمليات الحسابية الثنائية ذات الفاصلة العائمة
- هندسة النقطة العائمة لشركة IBM
- خوارزمية جمع كاهان
- تنسيق Microsoft الثنائي (MBF)
- ميني فلوات
- Q (تنسيق الأرقام) للدقة الثابتة
- تنسيق النقطة العائمة بدقة رباعية (بما في ذلك المزدوج المزدوج)
- شخصيات مهمة
- تنسيق النقطة العائمة بدقة واحدة
ملحوظات
- ^ يُطلق بعض المؤلفين أيضًا على دلالة رقم فاصل عشري اسم مانتيسا - ولا ينبغي الخلط بينه وبين مانتيسا اللوغاريتم . يستخدم البعض أيضًا مصطلحات غامضة إلى حد ما مثل المعامل أو الحجة . كما أن استخدام مصطلح الكسر من قبل بعض المؤلفين قد يكون مضللًا أيضًا. مصطلح الخاصية (كما يستخدمه مركز السيطرة على الأمراض على سبيل المثال) غامض، حيث تم استخدامه تاريخيًا أيضًا لتحديد شكل ما من أشكال الأسس للأرقام الفاصلة العائمة.
- ^ يُشار أحيانًا أيضًا إلى أس الرقم ذي الفاصلة العائمة باسم المقياس . مصطلح السمة ( للأس المتحيز أو تحيز الأس أو التمثيل الزائد n ) غامض، حيث تم استخدامه تاريخيًا أيضًا لتحديد أهمية الأرقام ذات الفاصلة العائمة.
- ^ تُستخدم العمليات الحسابية العائمة السداسية عشرية (الأساس 16) في نظام IBM 360 (1964) و 370 (1970) بالإضافة إلى العديد من أجهزة IBM الأحدث، وفي أجهزة RCA Spectra 70 (1964)، وSiemens 4004 (1965)، و7.700 (1974)، و7.800، و7.500 (1977) من الحواسيب الرئيسية وخلفائها، وسلسلة الحواسيب الرئيسية Unidata 7.000، و Manchester MU5 (1972)، وأجهزة الكمبيوتر HEP (1982)، وفي عائلات الحواسيب الرئيسية المتوافقة مع 360/370 التي تصنعها شركات Fujitsu وAmdahl وHitachi. كما أنها تستخدم في Illinois ILLIAC III (1966)، و Data General Eclipse S/200 (حوالي 1974)، و Gould Powernode 9080 (1980s)، و Interdata 8/32 (1970s)، وSEL Systems 85 و86 بالإضافة إلى SDS Sigma 5 (1967)، و 7 (1966) و Xerox Sigma 9 (1970).
- ^ تم استخدام الحسابيات ذات النقطة العائمة الثماني (الأساس 8) في أجهزة الكمبيوتر Ferranti Atlas (1962)، و Burroughs B5500 (1964)، وBurroughs B5700 (1971)، و Burroughs B6700 (1971)، و Burroughs B7700 (1972).
- ^ تُستخدم الحسابات العائمة الرباعية (الأساس 4) في حاسوب Illinois ILLIAC II (1962). كما تُستخدم أيضًا في أنظمة المسح الميداني عالية الدقة DFS IV وV بنظام المجال الرقمي.
- ^ يتم استخدام العمليات الحسابية ذات الفاصلة العائمة ذات القاعدة 256 في جهاز الكمبيوتر R1 التابع لمعهد رايس (منذ عام 1958).
- ^ تم استخدام العمليات الحسابية ذات النقطة العائمة Base-65536 في جهاز الكمبيوتر MANIAC II (1956).
- ^ لا تقوم أجهزة الكمبيوتر بالضرورة بحساب القيمة الدقيقة؛ بل عليها ببساطة أن تنتج النتيجة المستديرة المكافئة كما لو كانت قد حسبت النتيجة الدقيقة بلا حدود.
- ^ لقد أدى التعقيد الهائل لخوارزميات القسمة الحديثة إلى خطأ شهير. تم شحن نسخة مبكرة من شريحة Intel Pentium بتعليمات قسمة كانت تعطي في حالات نادرة نتائج غير صحيحة قليلاً. تم شحن العديد من أجهزة الكمبيوتر قبل اكتشاف الخطأ. حتى تم استبدال أجهزة الكمبيوتر المعيبة، تم تطوير إصدارات مُصحَّحة من المجمِّعات التي يمكنها تجنب حالات الفشل. انظر خطأ Pentium FDIV .
- ^ لكن محاولة حساب cos(π) تعطي −1 بالضبط. ولأن المشتقة تقترب من الصفر بالقرب من π، فإن تأثير عدم الدقة في الحجة أصغر كثيرًا من المسافة بين أرقام الفاصلة العائمة حول −1، والنتيجة المقربة دقيقة.
- ^ يلاحظ ويليام كاهان : "باستثناء المواقف النادرة للغاية، فإن الحساب الدقيق للغاية يخفف عمومًا من المخاطر الناجمة عن التقريب بتكلفة أقل بكثير من سعر محلل الأخطاء المختص".
- ^ يوضح توسع تايلور لهذه الدالة أنها مشروطة جيدًا بالقرب من 1: A(x) = 1 − (x−1)/2 + (x−1)^2/12 − (x−1)^4/720 + (x−1)^6/30240 − (x−1)^8/1209600 + ... لـ |x−1| < π.
- ^ إذا كان long double هو دقة IEEE رباعية ، فسيتم الاحتفاظ بالدقة المزدوجة الكاملة؛ إذا كان long double هو دقة IEEE مزدوجة ممتدة ، فسيتم الاحتفاظ بالدقة الإضافية، ولكن ليس الدقة الكاملة.
- ^ يمكن التحقق من تكافؤ الشكلين جبريًا من خلال ملاحظة أن مقام الكسر في الشكل الثاني هو مرافق بسط الشكل الأول. من خلال ضرب أعلى وأسفل التعبير الأول بهذا المرافق، نحصل على التعبير الثاني.
مراجع
- ^ abcdef مولر، جان ميشيل؛ بريسبار، نيكولاس. دي دينشين، فلوران؛ جانرود، كلود بيير؛ لوفيفر، فنسنت؛ ملكيوند، غيوم؛ ريفول, ناتالي ; ستيهلي، داميان؛ توريس، سيرج (2010). دليل حساب النقطة العائمة (الطبعة الأولى). بيركهوسر . دوى :10.1007/978-0-8176-4705-6. رقم ISBN 978-0-8176-4704-9. LCCN 2009939668.
- ^ ab Sterbenz, Pat H. (1974). Floating-Point Computing. Englewood Cliffs, NJ, United States: Prentice-Hall. ISBN 0-13-322495-3.
- ^ سميث، ستيفن دبليو. (1997). "الفصل 28، النقطة الثابتة مقابل النقطة العائمة". دليل العلماء والمهندسين لمعالجة الإشارات الرقمية . دار النشر التقنية بكاليفورنيا، ص 514. رقم ISBN 978-0-9660176-3-2. تم الاسترجاع بتاريخ 2012-12-31 .
- ^ أب زيندنر ، إبرهارد (صيف 2008). “Rechnerarithmetik: Fest- und Gleitkommasysteme” (PDF) (نص المحاضرة) (باللغة الألمانية). جامعة فريدريش شيلر في جينا . ص. 2. أرشفة (PDF) من النسخة الأصلية بتاريخ 2018-08-07 . تم الاسترجاع 2018-08-07 .[1] (ملاحظة: هذه الإشارة تعطي بشكل غير صحيح قاعدة النقطة العائمة لـ MANIAC II على أنها 256، بينما هي في الواقع 65536.)
- ^ abcd Beebe, Nelson HF (2017-08-22). "الفصل ح. بنيات الفاصلة العائمة التاريخية". دليل حساب الوظائف الرياضية - البرمجة باستخدام مكتبة البرامج المحمولة MathCW (الطبعة الأولى). سولت ليك سيتي، يوتا، الولايات المتحدة الأمريكية: Springer International Publishing AG . ص. 948. doi :10.1007/978-3-319-64110-2. ISBN 978-3-319-64109-6. LCCN 2017947446. S2CID 30244721.
- ^ Savard, John JG (2018) [2007], "The Decimal Floating-Point Standard", quadibloc ، تم أرشفته من الأصل في 2018-07-03 ، تم استرجاعه في 2018-07-16
- ^ باركنسون، روجر (2000-12-07). "الفصل 2 - أنظمة المسح الرقمي عالي الدقة للمواقع - الفصل 2.1 - أنظمة التسجيل الميداني الرقمي". مسوحات المواقع عالية الدقة (الطبعة الأولى). مطبعة CRC . ص. 24. رقم ISBN 978-0-20318604-6. تم الاسترجاع في 2019-08-18 .
[…] كانت أنظمة مثل [نظام المجال الرقمي] DFS IV وDFS V عبارة عن أنظمة فاصلة عائمة رباعية واستخدمت خطوات مكسب تبلغ 12 ديسيبل. […]
(256 صفحة) - ^ لازاروس، روجر ب. (1957-01-30) [1956-10-01]. "MANIAC II" (PDF) . لوس ألاموس، نيو مكسيكو، الولايات المتحدة الأمريكية: مختبر لوس ألاموس العلمي لجامعة كاليفورنيا. ص. 14. LA-2083. مؤرشف (PDF) من الأصل في 2018-08-07 . تم الاسترجاع 2018-08-07 .
[…] القاعدة العائمة لـ Maniac، والتي هي 2
16
= 65,536. […] تسمح القاعدة الكبيرة لـ Maniac بزيادة كبيرة في سرعة الحساب ذي النقطة العائمة. على الرغم من أن هذه القاعدة الكبيرة تعني إمكانية وجود ما يصل إلى 15 صفرًا أوليًا، فإن حجم الكلمة الكبير الذي يبلغ 48 بت يضمن أهمية كافية. […]
- ^ توريس كيفيدو، ليوناردو. Automática: Complemento de la Teoría de las Máquinas، (pdf)، الصفحات من 575 إلى 583، Revista de Obras Públicas، 19 نوفمبر 1914.
- ^ رونالد ت. كنوسيل. الأرقام والحواسيب، سبرينغر، ص 84-85، 2017. ISBN 978-3319505084
- ^ راندل 1982، ص 6، 11-13.
- ^ راندل، بريان. أجهزة الكمبيوتر الرقمية، تاريخ الأصول، (pdf)، ص 545، أجهزة الكمبيوتر الرقمية: الأصول، موسوعة علوم الكمبيوتر، يناير 2003.
- ^ روخاس، راؤول (أبريل-يونيو 1997). "إرث كونراد زوس: بنية Z1 وZ3" (PDF) . حوليات تاريخ الحوسبة لمعهد مهندسي الكهرباء والإلكترونيات . 19 (2): 5-16. doi :10.1109/85.586067. مؤرشف من الأصل (PDF) في 2022-07-03 . تم الاسترجاع في 2022-07-03 .(12 صفحة)
- ^ روخاس، راؤول (2014-06-07). "Z1: هندسة وخوارزميات أول كمبيوتر لكونراد زوس". arXiv : 1406.1886 [cs.AR].
- ^ ab Kahan, William Morton (1997-07-15). "التأثير الخبيث للغات الحاسوب ومعاييره على الرياضيات التطبيقية والفيزياء والكيمياء. محاضرة جون فون نيومان" (PDF) . ص. 3. مؤرشف (PDF) من الأصل في 2008-09-05.
- ^ راندل، بريان ، محرر. (1982) [1973]. أصول الحواسيب الرقمية: أوراق مختارة (الطبعة الثالثة). برلين؛ نيويورك: سبرينغر فيرلاغ . ص. 244. رقم ISBN 978-3-540-11319-5.
- ^ سيفرانس، تشارلز (1998-02-20). "مقابلة مع الرجل العجوز في النقطة العائمة".
- ^ ISO/IEC 9899:1999 - لغات البرمجة - C . Iso.org. §F.2، الملاحظة 307.
"Extended" هو تنسيق البيانات الممتد المزدوج وفقًا لمعيار IEC 60559. يشير مصطلح Extended إلى تنسيقي IEC 60559 الشائعين 80 بت و128 بت الرباعي.
- ^ "تمثيل النقطة العائمة IEEE". 2021-08-03.
- ^ استخدام مجموعة GNU Compiler Collection وخيارات i386 وx86-64 محفوظ في 2015-01-16 على موقع Wayback Machine .
- ^ "long double (GCC specific) and __float128". StackOverflow .
- ^ "Procedure Call Standard for the ARM 64-bit Architecture (AArch64)" (PDF) . 2013-05-22. مؤرشف من الأصل (PDF) في 2013-07-31 . تم الاسترجاع في 2019-09-22 .
- ^ "ARM Compiler toolchain Compiler Reference, Version 5.03" (PDF) . 2013. Section 6.3 Basic data types . مؤرشف (PDF) من الأصل في 2015-06-27 . تم الاسترجاع في 2019-11-08 .
- ^ كاهان، ويليام مورتون (2004-11-20). "حول تكلفة الحوسبة ذات الفاصلة العائمة بدون حساب دقيق للغاية" (PDF) . مؤرشف من الأصل (PDF) في 2006-05-25 . تم الاسترجاع في 2012-02-19 .
- ^ "openEXR". openEXR. مؤرشف من الأصل في 2013-05-08 . تم الاسترجاع في 2012-04-25 .
نظرًا لأن مواصفات IEEE-754 للفاصلة العائمة لا تحدد تنسيقًا مكونًا من 16 بتًا، فقد ابتكرت ILM تنسيق "النصف". تحتوي قيم النصف على بت إشارة واحد، و5 بتات أس، و10 بتات عشرية.
- ^ "مقدمة تقنية إلى OpenEXR – نوع البيانات النصفية". openEXR . تم الاسترجاع في 2024-04-16 .
- ^ "تحليل IEEE-754" . تم الاسترجاع في 2024-08-29 .
- ^ ab Borland staff (1998-07-02) [1994-03-10]. "التحويل بين تنسيقات Microsoft Binary وIEEE". قاعدة بيانات المعلومات الفنية (TI1431C.txt). Embarcadero USA / Inprise (أصلاً: Borland ). معرف 1400. مؤرشف من الأصل في 2019-02-20 . تم الاسترجاع في 2016-05-30 .
[…] _fmsbintoieee(float *src4, float *dest4) […] تنسيق MS الثنائي […] ترتيب البايتات => m3 | m2 | m1 | الأس […] m1 هو
البايت الأكثر أهمية
=> sbbb|bbbb […] m3 هو
البايت الأقل أهمية
[…] m = بايت العشري […] s = بت الإشارة […] b = بت […] MBF هو الانحياز 128 و IEEE هو الانحياز 127. […] يضع MBF النقطة
العشرية
قبل
البت المفترض
، بينما يضع IEEE النقطة العشرية بعد البت المفترض. […] ieee_exp = msbin[3] - 2; /* actually, msbin[3]-1-128+127 */ […] _dmsbintoieee(double *src8, double *dest8) […] تنسيق ثنائي MS […] ترتيب البايت => m7 | m6 | m5 | m4 | m3 | m2 | m1 | الأس […] m1 هو البايت الأكثر أهمية => smmm|mmmm […] m7 هو البايت الأقل أهمية […] MBF هو الانحياز 128 و IEEE هو الانحياز 1023. […] يضع MBF النقطة العشرية قبل البت المفترض، بينما يضع IEEE النقطة العشرية بعد البت المفترض. […] ieee_exp = msbin[7] - 128 - 1 + 1023؛ […]
- ^ ab Steil, Michael (2008-10-20). "Create your own Version of Microsoft BASIC for 6502". pagetable.com. مؤرشف من الأصل في 2016-05-30 . تم الاسترجاع في 2016-05-30 .
- ^ "IEEE vs. Microsoft Binary Format; Rounding Issues (Complete)". دعم Microsoft . Microsoft . 2006-11-21. معرف المقال KB35826، Q35826. مؤرشف من الأصل في 2020-08-28 . تم الاسترجاع في 2010-02-24 .
- ^ ab Kharya, Paresh (2020-05-14). "TensorFloat-32 في وحدة معالجة الرسوميات A100 تعمل على تسريع تدريب الذكاء الاصطناعي، الحوسبة عالية الأداء حتى 20 ضعفًا" . تم الاسترجاع في 2020-05-16 .
- ^ "NVIDIA Hopper Architecture In-Depth". 2022-03-22.
- ^ Micikevicius, Paulius; Stosic, Dusan; Burgess, Neil; Cornea, Marius; Dubey, Pradeep; Grisenthwaite, Richard; Ha, Sangwon; Heinecke, Alexander; Judd, Patrick; Kamalu, John; Mellempudi, Naveen; Oberman, Stuart; Shoeybi, Mohammad; Siu, Michael; Wu, Hao (2022-09-12). "تنسيقات FP8 للتعلم العميق". arXiv : 2209.05433 [cs.LG].
- ^ كاهان، ويليام مورتون (2006-01-11). "ما مدى عبثية التقييمات غير المدروسة للتقريب في الحوسبة ذات النقطة العائمة؟" (PDF) . مؤرشف من الأصل (PDF) في 2004-12-21.
- ^ ab Gay, David M. (1990). Correctly Rounded Binary-Decimal and Decimal-Binary Conversions (Technical report). NUMERICAL ANALYSIS MANUSCRIPT 90-10, AT&T BELL LABORATORIES. CiteSeerX 10.1.1.31.4049 . (dtoa.c في netlab)
- ^ Loitsch, Florian (2010). "طباعة الأعداد ذات الفاصلة العائمة بسرعة ودقة باستخدام الأعداد الصحيحة" (PDF) . وقائع مؤتمر ACM SIGPLAN الحادي والثلاثين حول تصميم وتنفيذ لغات البرمجة . PLDI '10: مؤتمر ACM SIGPLAN حول تصميم وتنفيذ لغات البرمجة. ص 233-243. doi :10.1145/1806596.1806623. ISBN 978-1-45030019-3. S2CID 910409. مؤرشف من الأصل (PDF) في 2014-07-29.
- ^ "تمت إضافة دعم خوارزمية Grisu3 لـ double.ToString(). بواسطة mazong1123 · طلب سحب #14646 · dotnet/coreclr". GitHub .
- ^ Adams, Ulf (2018-12-02). "Ryū: تحويل سريع من عدد عشري إلى عدد عشري". إشعارات ACM SIGPLAN . 53 (4): 270–282. doi : 10.1145/3296979.3192369 . S2CID 218472153.
- ^ جولييتي ، رافائيللو. “طريقة Schubfach لتقديم الزوجي”.
- ^ “ابولز/دراشينيست”. جيثب . 2022-11-10.
- ^ "google/double-conversion". GitHub . 2020-09-21.
- ^ Lemire, Daniel (2021-03-22). "تحليل الأرقام بسرعة غيغابايت في الثانية". البرمجيات: الممارسة والخبرة . 51 (8): 1700–1727. arXiv : 2101.11408 . doi :10.1002/spe.2984. S2CID 231718830.
- ^ abc Goldberg, David (مارس 1991). "ما يجب أن يعرفه كل عالم كمبيوتر عن الحسابيات ذات النقطة العائمة". استطلاعات الحوسبة التابعة لجمعية آلات الحاسبات الآلية . 23 (1): 5–48. doi : 10.1145/103162.103163 . S2CID 222008826.(مع الملحق "الاختلافات بين تطبيقات IEEE 754": [2]، [3])
- ^ باترسون، ديفيد أ.؛ هينيسي، جون ل. (2014). تنظيم وتصميم الحاسوب، واجهة الأجهزة/البرمجيات . سلسلة مورجان كوفمان في هندسة وتصميم الحاسوب (الطبعة الخامسة). والتهام، ماساتشوستس، الولايات المتحدة الأمريكية: إلسفير. ص. 793. رقم ISBN 978-9-86605267-5.
- ^ براءة اختراع أمريكية رقم 3037701A، هوبرتو م سييرا، "وسائل التحكم الحسابية ذات الفاصلة العشرية العائمة للآلة الحاسبة"، صدرت في 5 يونيو 1962
- ^ ab Kahan, William Morton (1997-10-01). "Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic" (PDF) . ص. 9. مؤرشف (PDF) من الأصل في 2002-06-22.
- ^ "D.3.2.1". أدلة مطوري البرامج الخاصة بمعالجات Intel 64 وIA-32 . المجلد 1.
- ^ هاريس، ريتشارد (أكتوبر 2010). "You're Going To Have To Think!". Overload (99): 5–10. ISSN 1354-3172 . تم الاسترجاع في 2011-09-24 .
الأمر الأكثر إثارة للقلق هو خطأ الإلغاء الذي يمكن أن يؤدي إلى خسارة كارثية في الدقة.
[4] - ^ كريستوفر باركر: PEP 485 -- دالة لاختبار المساواة التقريبية
- ^ "نظام الدفاع الصاروخي باتريوت، مشكلة برمجية أدت إلى فشل النظام في الظهران، المملكة العربية السعودية". مكتب المحاسبة الحكومي الأمريكي . تقرير مكتب المحاسبة الحكومي IMTEC 92-26.
- ^ سكيل، روبرت (يوليو 1992)، "خطأ الجولة وصاروخ باتريوت" (PDF) ، أخبار سيام ، 25 (4): 11 ، تم استرجاعه في 2024-11-15
- ^ ويلكنسون، جيمس هاردي (2003-09-08). "تحليل الأخطاء". في رالستون، أنتوني؛ رايلي، إدوين د.؛ هيمندينجر، ديفيد (المحررون). موسوعة علوم الكمبيوتر. وايلي . ص 669-674. رقم ISBN 978-0-470-86412-8. تم الاسترجاع بتاريخ 2013-05-14 .
- ^ إينارسون، بو (2005). الدقة والموثوقية في الحوسبة العلمية. جمعية الرياضيات الصناعية والتطبيقية (SIAM). ص 50-. ISBN 978-0-89871-815-7. تم الاسترجاع بتاريخ 2013-05-14 .
- ^ abcd Higham, Nicholas John (2002). Accuracy and Stability of Numerical Algorithms (الطبعة الثانية). Society for Industrial and Applied Mathematics (SIAM). ص 27-28، 110-123، 493. ISBN 978-0-89871-521-7. 0-89871-355-2.
- ^ أوليفيرا، سويلي؛ ستيوارت، ديفيد إي. (2006-09-07). كتابة البرمجيات العلمية: دليل للأسلوب الجيد. مطبعة جامعة كامبريدج . ص 10-. ISBN 978-1-139-45862-7.
- ^ ab Kahan, William Morton (2005-07-15). حساب النقطة العائمة محاصر بقرارات العمل (PDF) . ARITH 17 برعاية IEEE ، ندوة حول الحساب الحاسوبي (الخطاب الرئيسي). ص. 6، 18. مؤرشف (PDF) من الأصل في 2006-03-17 . تم الاسترجاع في 2013-05-23 .(ملاحظة: يقدر كاهان أن معدل حدوث نتائج غير دقيقة بشكل مفرط بالقرب من التفردات ينخفض بعامل يبلغ حوالي 1/2000 باستخدام 11 بت إضافية من الدقة للامتداد المزدوج .)
- ^ كاهان، ويليام مورتون (2011-08-03). الحلول الضرورية للغاية لعدم إمكانية تصحيح أخطاء العمليات الحسابية ذات الفاصلة العائمة الكبيرة في العلوم والهندسة (PDF) . مؤتمر العمل IFIP/SIAM/NIST حول تحديد كمية عدم اليقين في الحوسبة العلمية، بولدر، كولورادو، ص. 33. مؤرشف (PDF) من الأصل في 2013-06-20.
- ^ كاهان، ويليام مورتون ؛ دارسي، جوزيف (2001) [1998-03-01]. "كيف تؤذي النقطة العائمة في جافا الجميع في كل مكان" (PDF) . مؤرشف (PDF) من الأصل في 2000-08-16 . تم الاسترجاع في 2003-09-05 .
- ^ abcd Kahan, William Morton (2000-08-27). "التسويق مقابل الرياضيات" (PDF) . ص 15، 35، 47. مؤرشف من الأصل (PDF) في 15 أغسطس 2003.
- ^ كاهان، ويليام مورتون (12 فبراير 1981). "لماذا نحتاج إلى معيار حسابي للفاصلة العائمة؟" (PDF) . ص 26. مؤرشف من الأصل (PDF) في 2004-12-04.
- ^ كاهان، ويليام مورتون (2001-06-04). بيندل، ديفيد (محرر). "ملاحظات محاضرات حول دعم النظام للحوسبة العلمية" (PDF) . مؤرشف (PDF) من الأصل في 2013-05-17.
- ^ "الحساب العشري العام". Speleotrove.com . تم الاسترجاع في 2012-04-25 .
- ^ كريستيانسن، توم؛ توركينجتون، ناثان؛ وآخرون (2006). "perlfaq4 / لماذا int() معطلة؟". perldoc.perl.org . تم الاسترجاع في 2011-01-11 .
- ^ Shewchuk, Jonathan Richard (1997). "الحسابات ذات الدقة التكيفية للفاصلة العائمة والمسندات الهندسية السريعة القوية". الهندسة المنفصلة والحسابية . 18 (3): 305-363. doi : 10.1007/PL00009321 .
- ^ كاهان، ويليام مورتون ؛ آيفوري، ميلودي واي. (1997-07-03). "التدوير يقلل من شأن الكابولي المثالي" (PDF) . مؤرشف من الأصل (PDF) في 2003-12-05.
- ^ "التحويل التلقائي إلى متجهات في LLVM". وثائق LLVM 13.
نحن ندعم عمليات الاختزال ذات النقطة العائمة عند استخدام -ffast-math.
- ^ "FloatingPointMath". ويكي GCC .
- ^ "55522 – -funsafe-math-optimizations ضار بشكل غير متوقع، وخاصة مع -shared". gcc.gnu.org .
- ^ "خيارات توليد الكود (مترجم GNU Fortran)". gcc.gnu.org .
- ^ "خطأ في zheevd · العدد #43 · مرجع-LAPACK/lapack". GitHub .
- ^ بيكر، هايكو؛ دارولوفا، إيفا؛ ميرين، ماجنوس أو؛ تاتلوك، زاكاري (2019). التزيين: دعم تحسينات نمط الرياضيات السريعة في مُجمِّع مُصدَّق . CAV 2019: التحقق بمساعدة الكمبيوتر. المجلد 11562. ص 155-173. doi : 10.1007/978-3-030-25543-5_10 .
قراءة إضافية
- ويلكينسون، جيمس هاردي (1963). أخطاء التقريب في العمليات الجبرية (الطبعة الأولى). إنجلوود كليفس، نيوجيرسي، الولايات المتحدة الأمريكية: برنتيس هول، إنك. رقم ISBN 9780486679990. السيد 0161456.(ملاحظة: أطروحات كلاسيكية مؤثرة في الحساب ذي النقطة العائمة.)
- ويلكينسون، جيمس هاردي (1965). مشكلة القيمة الذاتية الجبرية. دراسات أحادية حول التحليل العددي (الطبعة الأولى). دار نشر جامعة أكسفورد / دار نشر كلارندون . رقم ISBN 9780198534037. تم الاسترجاع بتاريخ 2016-02-11 .
- ستربينز، بات إتش. (1974). الحوسبة ذات النقطة العائمة . سلسلة برنتيس هول في الحوسبة الآلية (الطبعة الأولى). إنجلوود كليفس، نيوجيرسي، الولايات المتحدة الأمريكية: برنتيس هول . رقم ISBN 978-0-13-322495-5.
- جولوب، جين ف.؛ فان لوان، تشارلز ف. (1986). حسابات المصفوفات (الطبعة الثالثة). مطبعة جامعة جونز هوبكنز . رقم ISBN 978-0-8018-5413-2.
- Press, William Henry ; Teukolsky, Saul A .; Vetterling, William T .; Flannery, Brian P. (2007) [1986]. Numerical Recipes - The Art of Scientific Computing (الطبعة الثالثة). Cambridge University Press . ISBN 978-0-521-88407-5.(ملاحظة: الإصدار يحتوي على قرص مضغوط يحتوي على الكود المصدري.)
- كنوث، دونالد إرفين (1997). "القسم 4.2: حساب النقطة العائمة". فن برمجة الكمبيوتر ، المجلد 2: الخوارزميات شبه الرقمية (الطبعة الثالثة). أديسون ويسلي . ص 214-264. ISBN 978-0-201-89684-8.
- Blaauw, Gerrit Anne ; Brooks, Jr., Frederick Phillips (1997). هندسة الحاسوب: المفاهيم والتطور (الطبعة الأولى). Addison-Wesley . ISBN 0-201-10557-8.(1213 صفحة) (ملاحظة: هذه طبعة مجلد واحد. وكان هذا العمل متاحًا أيضًا في نسخة مكونة من مجلدين.)
- كورنيروب، بيتر؛ ماتولا، ديفيد دبليو. (2010). أنظمة الأعداد الدقيقة المحدودة والحساب . مطبعة جامعة كامبريدج . رقم ISBN 978-0-521-76135-2.
- Savard, John JG (2018) [2005], "Floating-Point Formats", quadibloc ، تم أرشفته من الأصل في 2018-07-03 ، تم استرجاعه في 2018-07-16
- مولر، جان ميشيل؛ بروني، نيكولاس؛ دي دينشين، فلوران؛ جانرود، كلود بيير؛ جولديس، ميوارا؛ لوفيفر، فنسنت؛ ملكيوند، غيوم؛ ريفول, ناتالي ; توريس، سيرج (2018) [2010]. دليل حساب النقطة العائمة (الطبعة الثانية). بيركهوسر . دوى :10.1007/978-3-319-76526-6. رقم ISBN 978-3-319-76525-9. LCCN 2018935254.
روابط خارجية
- "دراسة استقصائية حول تنسيقات النقطة العائمة".(ملاحظة: تقدم هذه الصفحة ملخصًا موجزًا للغاية لتنسيقات النقطة العائمة التي تم استخدامها على مر السنين.)
- Monniaux, David (مايو 2008). "The pitfalls of verified float-point computations". ACM Transactions on Programming Languages and Systems . 30 (3). Association for Computing Machinery (ACM) Transactions on programming language and systems (TOPLAS): 1–41. arXiv : cs/0701192 . doi :10.1145/1353445.1353446. S2CID 218578808.(ملاحظة: مجموعة من السلوكيات غير البديهية للفاصلة العائمة على المعماريات الشائعة، مع الآثار المترتبة على التحقق من البرنامج واختباره.)
- OpenCores. (ملاحظة: يحتوي هذا الموقع على نوى IP مفتوحة المصدر ذات فاصلة عائمة لتنفيذ مشغلات الفاصلة العائمة في أجهزة FPGA أو ASIC. يحتوي المشروع double_fpu على كود مصدر verilog لوحدة فاصلة عائمة ذات دقة مزدوجة. يحتوي المشروع fpuvhdl على كود مصدر vhdl لوحدة فاصلة عائمة ذات دقة واحدة.)
- فليجال، إيريك (2004). "تحسين النقطة العائمة في Microsoft Visual C++". شبكة مطوري مايكروسوفت . مؤرشف من الأصل في 2017-07-06.
