دقة موسعة
تشير الدقة الموسعة إلى تنسيقات الأعداد العشرية التي توفر دقة أعلى من تنسيقات الأعداد العشرية الأساسية. [ 1 ] تدعم تنسيقات الدقة الموسعة التنسيق الأساسي من خلال تقليل أخطاء التقريب والفيضان في القيم الوسيطة للتعبيرات في التنسيق الأساسي. وعلى النقيض من الدقة الموسعة ، تشير الحسابات ذات الدقة العشوائية إلى تطبيقات لأنواع عددية أكبر بكثير (بسعة تخزين لا تكون عادةً من قوى العدد اثنين) باستخدام برامج خاصة (أو، نادرًا، أجهزة).
تطبيقات الدقة الموسعة
هناك تاريخ طويل لصيغ الأعداد العشرية الموسعة يعود إلى منتصف القرن العشرين تقريبًا. وقد استخدمت شركات تصنيع مختلفة صيغًا متباينة لتحقيق دقة موسعة في أجهزة متنوعة. في كثير من الحالات، لا تتطابق صيغة الدقة الموسعة تمامًا مع صيغة الدقة المفردة والمزدوجة العادية التي يُفترض أن تُوسّعها. في حالات قليلة، كان التنفيذ مجرد تغيير برمجي في صيغة بيانات الأعداد العشرية، ولكن في معظم الحالات، تم تنفيذ الدقة الموسعة في مكونات مادية، إما مدمجة في المعالج المركزي نفسه، أو في أغلب الأحيان، مدمجة في مكونات معالج إضافي اختياري يُسمى " وحدة الأعداد العشرية " (FPU) أو "معالج الأعداد العشرية" ( FPP )، والذي يمكن للمعالج المركزي الوصول إليه كجهاز إدخال/إخراج سريع.
تنسيقات الدقة الموسعة من IBM
قدم جهاز IBM 1130 ، الذي طُرح للبيع عام 1965، [ 2 ] صيغتين لحساب الفاصلة العائمة: صيغة "الدقة القياسية" ذات 32 بت، وصيغة "الدقة الموسعة" ذات 40 بت. تحتوي صيغة الدقة القياسية على جزء دال مكون من 24 بت بنظام المتمم الثنائي ، بينما تستخدم صيغة الدقة الموسعة جزءًا دالًا مكونًا من 32 بت بنظام المتمم الثنائي. تستفيد الصيغة الأخيرة استفادة كاملة من عمليات الأعداد الصحيحة ذات 32 بت في وحدة المعالجة المركزية. السمة المشتركة في كلتا الصيغتين هي حقل مكون من 8 بت يحتوي على قوة العدد 2 مضروبة في 128. تُنفذ عمليات حساب الفاصلة العائمة بواسطة البرمجيات، ولا تدعم هذه الصيغة الدقة المزدوجة إطلاقًا. تشغل الصيغة الموسعة ثلاث كلمات، كل منها مكونة من 16 بت، ويتم تجاهل المساحة الإضافية ببساطة. [ 3 ]
يدعم نظام IBM System/360 تنسيق الفاصلة العائمة "القصير" ذو 32 بت، وتنسيق الفاصلة العائمة "الطويل" ذو 64 بت. [ 4 ] ويضيف نظاما 360/85 و System/370 اللاحقان دعمًا لتنسيق "ممتد" ذو 128 بت. [ 5 ] ولا تزال هذه التنسيقات مدعومة في التصميم الحالي ، حيث تُعرف الآن باسم تنسيقات " الفاصلة العائمة السداسية عشرية " (HFP).
تنسيق مايكروسوفت MBF ذو الدقة الموسعة
يدعم منفذ Microsoft BASIC لوحدة المعالجة المركزية 6502 ، كما هو الحال في التعديلات مثل Commodore BASIC و AppleSoft BASIC و KIM-1 BASIC أو MicroTAN BASIC ، إصدارًا موسعًا من تنسيق الفاصلة العائمة Microsoft Binary Format (MBF) منذ عام 1977. [ 6 ]
تنسيقات IEEE 754 ذات الدقة الموسعة
يوصي معيار IEEE 754 للفاصلة العائمة بتوفير تنسيقات ذات دقة موسعة. يحدد المعيار الحد الأدنى من متطلبات التنسيق الموسع، ولكنه لا يحدد ترميزًا معينًا. [ 7 ] ويعود اختيار الترميز إلى المطور. [ 8 ]
تدعم معالجات IA32 و x86-64 و Itanium ما هو إلى حد بعيد التنسيق الأكثر تأثيرًا على هذا المعيار، وهو تنسيق Intel 80 بت (64 بت ذات دلالة) "الممتد المزدوج"، الموصوف في القسم التالي .
تدعم معالجات الرياضيات المساعدة Motorola 6888x ومعالجات Motorola 68040 و 68060 أيضًا تنسيقًا ذا دقة موسعة للمعامل ذي 64 بت (مشابه لتنسيق Intel، مع إضافة 16 بت غير مستخدمة بين حقلي الأس والمعامل إلى تنسيق 96 بت، وتُعتبر القيم ذات الأس صفر والبت 63 واحد قيمًا مُعَيَّرة [ 9 ] ). أما معالجات Coldfire اللاحقة فلا تدعم هذا التنسيق ذي الدقة الموسعة 96 بت. [ 10 ]
يدعم المعالج المساعد الرياضي FPA10 للمعالجات ARM المبكرة أيضًا تنسيقًا ذا دقة موسعة للمعاملات ذات 64 بت (مشابه لتنسيق Intel على الرغم من أنه مُضاف إليه 16 بتًا صفريًا بين حقل الإشارة وحقل الأس ليصبح تنسيقًا ذا 96 بت)، ولكن بدون تقريب صحيح. [ 11 ]
تتوافق تنسيقات x87 و Motorola 68881 ذات 80 بت مع متطلبات تنسيق IEEE 754-1985 المزدوج الممتد، [ 12 ] كما هو الحال مع تنسيق IEEE 754 الثنائي ذي 128 بت .
تنسيق x86 ذو الدقة الموسعة
تنسيق الدقة الموسعة x86 هو تنسيق 80 بت تم تنفيذه لأول مرة في معالج Intel 8087 المساعد للرياضيات وهو مدعوم من قبل جميع المعالجات التي تعتمد على تصميم x86 والتي تتضمن وحدة الفاصلة العائمة (FPU).
كان معالج إنتل 8087 أول جهاز x86 يدعم العمليات الحسابية ذات الفاصلة العائمة في مكوناته المادية. صُمم هذا المعالج لدعم تنسيق "الدقة المفردة" 32 بت وتنسيق "الدقة المزدوجة" 64 بت لترميز وتبادل أرقام الفاصلة العائمة. لم يُصمم التنسيق الموسع لتخزين البيانات بدقة أعلى، بل لتمكين حساب نتائج الأعداد المزدوجة المؤقتة بشكل أكثر موثوقية ودقة من خلال تقليل أخطاء تجاوز السعة وأخطاء التقريب في العمليات الحسابية الوسيطة. [ أ ] [ 14 ] [ 15 ] جميع سجلات الفاصلة العائمة في معالج 8087 تستخدم هذا التنسيق، ويقوم المعالج تلقائيًا بتحويل الأرقام إلى هذا التنسيق عند تحميل السجلات من الذاكرة ، كما يُعيد تحويل النتائج إلى التنسيقات التقليدية عند تخزين السجلات مرة أخرى في الذاكرة. لتمكين حفظ نتائج التعبيرات الفرعية الوسيطة في متغيرات مؤقتة ذات دقة موسعة ومواصلتها عبر عبارات لغة البرمجة، واستئناف العمليات الحسابية المتقطعة من حيث توقفت، فإنه يوفر تعليمات تنقل القيم بين هذه السجلات الداخلية والذاكرة دون إجراء أي تحويل، مما يتيح الوصول إلى التنسيق الموسع للعمليات الحسابية [ ب ] - مما يعيد أيضًا إحياء مسألة دقة وظائف هذه الأرقام، ولكن بدقة أعلى.
دعمت وحدات الفاصلة العائمة (FPU) في جميع معالجات x86 اللاحقة هذا التنسيق. ونتيجةً لذلك، يُمكن تطوير برامج تستفيد من الدقة العالية التي يوفرها هذا التنسيق. يُشير ويليام كاهان ، المصمم الرئيسي لحسابات x87 ومقترح معيار IEEE 754 الأولي، إلى تطوير الفاصلة العائمة في x87 قائلاً: "تم تضمين تنسيق موسع بأوسع نطاق ممكن (80 بت) ليؤدي نفس دور الدعم الذي يؤديه التنسيق الداخلي ذو 13 خانة عشرية في آلات حاسبة هيوليت-باكارد ذات 10 خانات عشرية." [ 17 ] علاوة على ذلك، يُشير كاهان إلى أن 64 بت كانت أوسع نطاق للمعامل الذي يُمكن من خلاله إجراء عملية نقل الحمل دون زيادة زمن الدورة في معالج 8087، [ 18 ] وأن دقة x87 الموسعة صُممت لتكون قابلة للتوسيع إلى دقة أعلى في المعالجات المستقبلية.
- "في الوقت الحالي، يُعدّ تنسيق العشرة بايتات الموسّع حلاً وسطاً مقبولاً بين قيمة العمليات الحسابية فائقة الدقة وتكلفة تنفيذها بسرعة؛ وسرعان ما سيصبح بايتان إضافيان من الدقة مقبولين، وفي النهاية تنسيق ستة عشر بايتًا ... كان هذا النوع من التطور التدريجي نحو دقة أوسع مُتوقعًا بالفعل عند وضع معيار IEEE 754 للحسابات ذات الفاصلة العائمة ." [ 19 ]
يستخدم هذا التنسيق ذو 80 بت بتًا واحدًا لإشارة الجزء الكسري، و15 بتًا لحقل الأس (أي نفس نطاق تنسيق IEEE 754 ذي الدقة الرباعية 128 بتًا )، و64 بتًا للجزء الكسري. يتم تحيز حقل الأس بمقدار 16383، مما يعني أنه يجب طرح 16383 من قيمة حقل الأس لحساب القوة الفعلية للعدد 2. [ 20 ] تم حجز قيمة حقل الأس 32767 (جميع البتات الخمسة عشر تساوي 1 ) لتمكين تمثيل حالات خاصة مثل اللانهاية و" ليس عددًا" . إذا كان حقل الأس صفرًا، فإن القيمة تكون عددًا غير طبيعي ، ويكون أس العدد 2 هو -16382. [ 21 ]
![]()
في الجدول التالي، يمثل " s " قيمة بت الإشارة (0 تعني موجب، 1 تعني سالب)، ويمثل " e " قيمة حقل الأس الذي يُفسر على أنه عدد صحيح موجب، ويمثل " m " الجزء الكسري الذي يُفسر على أنه عدد ثنائي موجب، حيث تقع الفاصلة الثنائية بين البتات 63 و62. حقل " m " هو مزيج من الأجزاء الصحيحة والكسرية في الرسم التخطيطي أعلاه.
تفسير حقول قيمة الدقة الموسعة x86 الأس المهم معنى الأجزاء 78-64 البت 63 البتات 62-0 جميعها صفر 0 0 الصفر. بت الإشارة يعطي إشارة الصفر، والتي عادة ما تكون بلا معنى. غير صفري دون المستوى الطبيعي. القيمة هي (−1) s × m × 2 −16382 1 أي شئ شبه طبيعي. يفسر المعالج 80387 والإصدارات الأحدث هذه القيمة بشكل صحيح، لكنه لا يُنتجها. القيمة هي (−1) s × m × 2 −16382 الكل 1 0 0 اللانهاية الزائفة. تُحدد بتة الإشارة إشارة اللانهاية. يتعامل المعالجان 8087 و80287 مع هذه القيمة على أنها لانهاية. أما المعالج 80387 والإصدارات الأحدث فيتعامل معها على أنها معامل غير صالح. غير صفري إشارة زائفة "ليس رقمًا". بت الإشارة لا معنى له. يتعامل المعالجان 8087 و80287 مع هذه الإشارة على أنها إشارة "ليس رقمًا". أما المعالج 80387 والإصدارات الأحدث فيتعامل معها على أنها معامل غير صالح. 1 0 اللانهاية. تُشير بتة الإشارة إلى إشارة اللانهاية. ويتعامل المعالجان 8087 و80287 مع هذه الإشارات على أنها "إشارة وليست رقمًا". غير صفري ليس رقمًا. بت الإشارة لا معنى له. يتعامل المعالجان 8087 و80287 مع كل هذه البتات على أنها إشارة "ليس رقمًا". يشير البت رقم 62 إلى قيمة غير صحيحة وليست رقمًا. إذا كانت جميع البتات الأخرى أصفارًا، فهذا يعني قيمة غير محددة في نظام الفاصلة العائمة، وهي نتيجة عمليات حسابية غير صالحة مثل الجذر التربيعي لعدد سالب، أو لوغاريتم عدد سالب، أو 0÷0، أو ∞÷∞، أو ∞×0، وغيرها، وذلك عندما يكون المعالج مُهيأً لعدم توليد استثناءات للمعاملات غير الصالحة.
أي شيء آخر 0 أي شئ غير طبيعي. يتم توليده فقط على المعالجين 8087 و80287. أما المعالج 80387 والإصدارات الأحدث فيعتبر هذا معاملًا غير صالح. القيمة هي (−1) s × m × 2 e − 16383 1 أي شئ القيمة المعيارية. القيمة هي (−1) s × m × 2 e − 16383
على عكس تنسيقات الدقة المفردة والمزدوجة ، لا يستخدم هذا التنسيق بتًا ضمنيًا/مخفيًا . بل يحتوي البت 63 على الجزء الصحيح من المعامل، بينما تحتوي البتات من 62 إلى 0 على الجزء الكسري. سيكون البت 63 مساويًا لـ 1 في جميع الأعداد المعيارية. وقد تميز هذا التصميم بعدة مزايا عند تطوير معالج 8087 .
- يمكن إكمال العمليات الحسابية بشكل أسرع قليلاً إذا كانت جميع بتات الجزء المهم موجودة في السجل.
- يوفر المعامل ذو 64 بت دقة كافية لتجنب فقدان الدقة عند تحويل النتائج مرة أخرى إلى تنسيق الدقة المزدوجة في العدد الكبير من الحالات.
- يُتيح هذا التنسيق آليةً للإشارة إلى فقدان الدقة الناتج عن التدفق السفلي، والذي يمكن تطبيقه في العمليات اللاحقة. على سبيل المثال، الحساب 2 × 10⁻⁴⁹³ × 3 × 10⁻¹⁰ × 4 × 10⁻¹⁰ينتج عن العملية الحسابية 20 النتيجة الوسيطة6 × 10⁻⁴⁹⁰، وهي قيمةدون المستوى الطبيعيوتتضمن أيضًا فقدانًا في الدقة. حاصل ضرب جميع الحدود هو24 × 10⁻⁴⁹⁰ ، والذي يمكن تمثيله كعدد معياري. كان بإمكان المعالج80287إكمال هذه العملية الحسابية والإشارة إلى فقدان الدقة بإرجاع نتيجة "دون المستوى الطبيعي" (الأس لا يساوي صفرًا، البت63 = 0). [ 22 ] [ 23 ] أما المعالجات منذ80387،فلم تعد تُنتج قيمًا غير طبيعية ولا تدعم المدخلات غير الطبيعية للعمليات. ستُنتج هذه المعالجات قيمة دون المستوى الطبيعي في حالة حدوث تجاوز في القيمة، ولكنها ستُنتج نتيجة معيارية إذا أمكن تعديل العمليات اللاحقة على القيمة دون المستوى الطبيعي. [ 24 ]
أمثلة
تُقدَّم هذه الأمثلة بتمثيل البتات ، بالنظام الست عشري ، لقيمة الفاصلة العائمة. ويشمل ذلك الإشارة، والأس (المتحيز)، والجزء الكسري.
0000 0000 0000 0000 0001 16 = 2 −16382 × 2 −63 = 2 −16445 ≈ 3.64519953188247460252841 × 10 −4951 (أصغر عدد موجب دون المستوى الطبيعي)
0000 7ffff ffff ffff ffff 16 = 2 −16382 × (1 − 2 −63 ) ≈ 3.36210314311209350589816 × 10 −4932 (أكبر عدد دون الطبيعي)
0001 8000 0000 0000 0000 16 = 2 −16382 ≈ 3.36210314311209350626268 × 10 −4932 (أصغر عدد طبيعي موجب)
7ffe ffff ffff ffff ffff 16 = 2 16384 × (1 − 2 −64 ) ≈ 1.18973149535723176502126 × 10 4932 (أكبر عدد طبيعي)
3ffe ffff ffff ffff ffff 16 = 1 − 2 −64 ≈ 0.99999999999999999994579 (أكبر عدد أقل من واحد)
3fff 8000 0000 0000 0000 16 = 1 (واحد)
3fff 8000 0000 0000 0001 16 = 1 + 2 −63 ≈ 1.0000000000000000010842 (أصغر عدد أكبر من واحد)
4000 8000 0000 0000 0000 16 = 2 c000 8000 0000 0000 0000 16 = −2
0000 0000 0000 0000 0000 16 = 0 8000 0000 0000 0000 0000 16 = −0
3فد آآآآآآآآآآب 16 ≈ 0.33333333333333333334237 (أقرب تقريب إلى ⅓ )4000 adf8 5458 a2bb 4a9b 16 ≈ 2.71828182845904523542817 (أقرب قيمة تقريبية لـ e)
4000 c90f daa2 2168 c235 16 ≈ 3.14159265358979323851281 (أقرب تقريب لـ π)
مقدمة عن الاستخدام
أصبح تنسيق الفاصلة العائمة 80 بت متاحًا على نطاق واسع بحلول عام 1984، [ 25 ] بعد تطوير لغات البرمجة C وFortran وما شابهها، والتي كانت في البداية توفر فقط أحجام الفاصلة العائمة الشائعة 32 و64 بت. في تصميم x86، تدعم معظم مترجمات لغة C الآن دقة 80 بت الموسعة عبر نوع البيانات long double ، وقد تم تحديد ذلك في معايير C99 / C11 (IEC 60559 حسابات الفاصلة العائمة (الملحق F)). غالبًا ما تدعم المترجمات على x86 للغات الأخرى الدقة الموسعة أيضًا، أحيانًا عبر امتدادات غير قياسية: على سبيل المثال، يوفر Turbo Pascalextended نوعًا معينًا، ولدى العديد من مترجمات FortranREAL*10 نوع آخر (مماثل لـ REAL*4و REAL*8). تتضمن هذه المترجمات عادةً إجراءات فرعية رياضية ذات دقة موسعة ، مثل الجذر التربيعي والدوال المثلثية ، في مكتباتها القياسية .
نطاق العمل
يتراوح نطاق تنسيق الفاصلة العائمة ذي 80 بت (بما في ذلك القيم غير الطبيعية ) من حوالي 3.65 × 10⁻⁴⁹⁵ إلى 1.18 × 10⁻⁴⁹⁵+4932 .على الرغم من أن لوغاريتم 10 ( 264 ) ≈ 19.266 ،هذا التنسيق يُوصف عادةً بأنه يُعطي دقة تصل إلى ثمانية عشر رقمًا معنويًا تقريبًا (الجزء الصحيح من لوغاريتم 10 ( 263 ) ،وهو الحد الأدنى المضمون للدقة). يُعد استخدام النظام العشري عند الحديث عن النظام الثنائي غير مناسب، لأن معظم الكسور العشرية تُمثل متواليات دورية في النظام الثنائي، تمامًا كما هو الحال مع⅔في النظام العشري. وبالتالي، فإن قيمة مثل 10.15 تُمثل في النظام الثنائي بما يُعادل 10.1499996185، وهكذا في النظام العشري،REAL*4بينما تُمثل 10.15000000000000035527، وهكذا فيREAL*8النظام الثنائي. سيتضمن التحويل بين النظامين تقريبًا، باستثناء تلك الكسور العشرية القليلة التي تُمثل قيمة ثنائية دقيقة، مثل 0.625 . بالنسبة لـREAL*10، يكون التسلسل العشري هو 10.1499999999999999996530553 وهكذا. الرقم التاسع الأخير هو الرقم الكسري الثامن عشر، وبالتالي الرقم العشرون ذو الدلالة في التسلسل. يمكن تحديد حدود التحويل بين النظام العشري والثنائي لتنسيق 80 بت كما يلي: إذا تم تقريب سلسلة عشرية تحتوي على 18 رقمًا ذا دلالة على الأكثر بشكل صحيح إلى قيمة ثنائية عائمة IEEE 754 ذات 80 بت (كما في الإدخال)، ثم تم تحويلها مرة أخرى إلى نفس عدد الأرقام العشرية ذات الدلالة (كما في الإخراج)، فإن السلسلة النهائية ستطابق السلسلة الأصلية تمامًا؛ بينما، على العكس من ذلك، إذا تم تحويل قيمة ثنائية عائمة IEEE 754 ذات 80 بت بشكل صحيح وتقريبها (أقرب) إلى سلسلة عشرية تحتوي على 21 رقمًا عشريًا ذا دلالة على الأقل، ثم تم تحويلها مرة أخرى إلى التنسيق الثنائي، فإنها ستطابق السلسلة الأصلية تمامًا. [ 12 ] هذه التقريبات إشكالية بشكل خاص عند تحديد أفضل قيمة للثوابت في الصيغ بدقة عالية، كما يمكن حسابها عن طريقالحساب ذي الدقة التعسفية.
الحاجة إلى تنسيق 80 بت
من الأمثلة البارزة على ضرورة وجود حد أدنى من الدقة يبلغ 64 بت في الجزء الدال من تنسيق الدقة الموسعة، الحاجة إلى تجنب فقدان الدقة عند إجراء عملية الرفع إلى الأس على قيم ذات دقة مضاعفة . [ 26 ] [ 27 ] [ 28 ] [ ج ] لا توفر وحدات الفاصلة العائمة x86 تعليمة تُجري عملية الرفع إلى الأس مباشرةً ، بل توفر مجموعة من التعليمات التي يمكن للبرنامج استخدامها بالتسلسل لإجراء هذه العملية باستخدام المعادلة التالية:
لتجنب فقدان الدقة، يجب حساب النتائج الوسيطة " log 2 ( x ) " و " y ·log 2 ( x ) " بدقة أعلى بكثير، لأنه يجب أن يتسع حقل الأس وحقل المعامل لـ x في حقل المعامل للنتيجة الوسيطة. وبالتالي، يُقسّم حقل المعامل للنتيجة الوسيطة بين حقل الأس وحقل المعامل للنتيجة النهائية عند حساب نتيجتين وسيطتين . ويشرح النقاش التالي هذا الشرط بمزيد من التفصيل.
بعد فك بعض التعقيدات، يمكن تمثيل قيمة IEEE 754 ذات الدقة المزدوجة على النحو التالي:
حيث s هي إشارة الأس (إما 0 أو 1)، وE هو الأس غير المتحيز، وهو عدد صحيح يتراوح بين 0 و1023، و M هو الجزء الكسري، وهو قيمة مكونة من 53 بت تقع ضمن النطاق 1 ≤ M < 2. يمكن تجاهل الأعداد السالبة والصفر لأن لوغاريتم هذه القيم غير مُعرَّف. لأغراض هذه المناقشة، لا يمتلك M دقة 53 بت لأنه مُقيد بأن يكون أكبر من أو يساوي واحدًا، أي أن البت المخفي لا يُحتسب ضمن الدقة (لاحظ أنه في الحالات التي يكون فيها M أقل من 1، تكون القيمة في الواقع غير طبيعية، وبالتالي قد تكون قد فقدت بعضًا من دقتها. هذه الحالة خارج نطاق هذه المقالة).
يؤدي أخذ اللوغاريتم لهذا التمثيل لعدد ذي دقة مزدوجة وتبسيطه إلى النتائج التالية:
توضح هذه النتيجة أنه عند أخذ اللوغاريتم ذي الأساس 2 لعدد ما، تصبح إشارة أس القيمة الأصلية هي إشارة اللوغاريتم، ويصبح أس القيمة الأصلية هو الجزء الصحيح من الجزء الكسري للوغاريتم، ويتحول الجزء الكسري للقيمة الأصلية إلى الجزء الكسري من الجزء الكسري للوغاريتم.
بما أن E عدد صحيح يقع ضمن النطاق من 0 إلى 1023، فإنه يلزم ما يصل إلى 10 بتات على يسار الفاصلة العشرية لتمثيل الجزء الصحيح من اللوغاريتم. ولأن M يقع ضمن النطاق 1 ≤ M < 2 ، فإن قيمة log₂M تقع ضمن النطاق 0 ≤ log₂M < 1 ، لذا يلزم 52 بتًا على الأقل على يمين الفاصلة العشرية لتمثيل الجزء الكسري من اللوغاريتم. وبدمج 10 بتات على يسار الفاصلة العشرية مع 52 بتًا على يمينها ، يجب حساب الجزء الدال من اللوغاريتم بدقة لا تقل عن 62 بتًا. عمليًا، تكون قيم M أقل من يتطلب الأمر 53 بتًا على يمين الفاصلة العشرية وقيم M أقل منيتطلب الأمر 54 بتًا على يمين الفاصلة العشرية لتجنب فقدان الدقة. ولتحقيق التوازن مع هذا الشرط المتعلق بزيادة الدقة على يمين الفاصلة العشرية، فإن الأسس الأقل من 512 تتطلب 9 بتات فقط على يسار الفاصلة العشرية، والأسس الأقل من 256 تتطلب 8 بتات فقط على يسار الفاصلة العشرية.
الجزء الأخير من عملية حساب الأس هو حساب نتيجتين وسيطتين . تتكون "النتيجة الوسيطة" من جزء صحيح " I " مضافًا إليه جزء كسري " F ". إذا كانت النتيجة الوسيطة سالبة، فسيلزم إجراء تعديل طفيف للحصول على جزء كسري موجب لأن كلاً من " I " و" F " عددان سالبان.
للحصول على نتائج وسيطة إيجابية:
بالنسبة للنتائج الوسيطة السلبية:
وبالتالي، يصبح الجزء الصحيح من النتيجة الوسيطة (" I " أو " I - 1 ") مضافًا إليه قيمة الانحياز هو أس النتيجة النهائية، ويصبح الجزء الكسري الموجب المُحوَّل من النتيجة الوسيطة: 2F أو 2F + 1 هو الجزء الدال في النتيجة النهائية. ولتوفير دقة 52 بت للنتيجة النهائية، يجب الحفاظ على الجزء الكسري الموجب عند 52 بت على الأقل.
في الختام، يعتمد العدد الدقيق للبتات اللازمة للدقة في الجزء المهم من النتيجة الوسيطة إلى حد ما على البيانات، ولكن 64 بتًا كافية لتجنب فقدان الدقة في الغالبية العظمى من عمليات حساب الأس التي تتضمن أرقامًا ذات دقة مزدوجة .
يُحدد عدد البتات اللازمة لحساب أسّ العدد ذي الدقة الموسّعة بناءً على شرط عدم تجاوز حاصل ضرب عددين من نوع الدقة المزدوجة للحدود المسموح بها عند حسابهما باستخدام هذا النوع من الأعداد. أكبر أسّ ممكن لقيمة من نوع الدقة المزدوجة هو 1023، لذا فإنّ أسّ أكبر حاصل ضرب ممكن لعددين من نوع الدقة المزدوجة هو 2047 (قيمة من 11 بت). إضافة قيمة انحياز لمراعاة الأسس السالبة يعني أن حقل الأسّ يجب أن يكون عرضه 12 بت على الأقل.
بدمج هذه المتطلبات: بت واحد للإشارة، و12 بت للأس المتحيز، و64 بت للجزء الكسري، فإن تنسيق الدقة الموسعة يحتاج إلى 77 بت على الأقل. وقد أدت الاعتبارات الهندسية إلى التعريف النهائي لتنسيق 80 بت (على وجه الخصوص، يشترط معيار IEEE 754 أن يتطابق نطاق الأس في تنسيق الدقة الموسعة مع نطاق الأس في تنسيق الدقة الرباعي الأكبر التالي، والذي يبلغ 15 بت). [ 27 ]
ومن الأمثلة الأخرى على الحسابات التي تستفيد من الحسابات ذات الدقة الموسعة، مخططات التحسين التكرارية ، المستخدمة لتنظيف الأخطاء المتراكمة في الحل المباشر بشكل غير مباشر أثناء العدد الكبير جدًا من الحسابات التي تُجرى عادةً في الجبر الخطي العددي. [ 30 ]
الدعم اللغوي
- تستخدم بعض تطبيقات لغة C / C++ (مثل مجموعة مترجمات GNU (GCC) و Clang و Intel C++ )
long doubleأرقام الفاصلة العائمة ذات 80 بت على أنظمة x86. مع ذلك، يُعد هذا سلوكًا خاصًا بالتطبيق، وليس إلزاميًا، ولكنه مسموح به وفقًا للمعيار، كما هو محدد لأجهزة IEEE 754 في معيار C99 "الملحق F IEC 60559 للحسابات ذات الفاصلة العائمة". يوفر GCC أيضًا أنواعًا__float80أخرى__float128. [ 31 ] - بعض تطبيقات Common Lisp (مثل CMU Common Lisp و Embeddable Common Lisp )
long-floatتستخدم أرقام الفاصلة العائمة 80 بت على أنظمة x86. - تستخدم لغة البرمجة D
realأكبر حجم للفاصلة العائمة مُتاح في الأجهزة، على سبيل المثال 80 بت لمعالجات x86 . أما في الأجهزة الأخرى، فسيكون هذا هو أوسع نوع للفاصلة العائمة يدعمه المعالج أصلاً، أو دقة مزدوجة 64 بت، أيهما أوسع. - يحتوي Turbo Pascal (و Object Pascal أو Delphi ) على
extendedنوع 80 بت متاح بالإضافة إلىreal/single(32 بت) وdouble(64 بت)، إما بشكل أصلي (عند وجود معالج مساعد 80x87) أو محاكى (من خلال مكتبة Turbo87)؛ هذاextendedالنوع متاح على منصات 16 و32 و64 بت، وربما مع إضافة حشو . [ 32 ] - يوفر نظام وقت تشغيل Racket نوع البيانات extflonum ذو 80 بت على أنظمة x86.
- توفر مكتبة Swift القياسية
Float80نوع البيانات. - يوفر مُترجم PowerBASIC BASIC نوع بيانات الفاصلة العائمة ذات الدقة الموسعة 10 بايت
EXT.EXTENDED - تدعم بعض إصدارات BBC BASIC ، ولا سيما BBC BASIC لنظام التشغيل Windows و BBC BASIC لـ SDL 2.0 ، الأعداد العشرية ذات الدقة الموسعة 10 بايت عند التشغيل على وحدة معالجة مركزية x86.
- يوفر برنامج Zig نوع f80 منذ الإصدار 0.10.0.
انظر أيضاً
- GNU MPFR – مكتبة GNU "موثوقية متعددة الدقة للفاصلة العائمة" للغة C
- نظام الفاصلة العائمة الست عشرية من IBM
- IEEE 754
- لونغ دبل
- x87
الحواشي
- ↑ «يهدف هذا التنسيق بشكل أساسي إلى مساعدة المبرمجين على تحسين سلامة برامجهم أحادية وثنائية المصفوفة، والحد من التدهور الناتج عن التقريب في حسابات المصفوفات الثنائية ذات الأبعاد الأكبر، ويمكن استخدامه بسهولة بحيث لا يؤدي استبدال رباعي المصفوفة بالحاجة الموسعة إلى إبطال استخدامه أبدًا.» - مصمم x87 دبليو. كاهان [ 13 ]
- ↑ «ستستخدم لغات البرمجة عالية المستوى (بشكل غير مرئي) التعبيرات الفرعية الوسيطة، وقد توفر لاحقًا التعبيرات الموسعة كنوع بيانات قابل للتصريح.» [ 16 ] : 70
- ↑ "إن وجود عدد من البتات الإضافية للدقة في الصيغة الموسعة، مساوياً على الأقل لعدد البتات الإضافية في حقل الأس في الصيغة الأساسية التي تدعمها، يُبسط بشكل كبير الحساب الدقيق للدوال المتسامية، والضرب الداخلي، ودالة القوة y x ." [ 29 ] : 70
مراجع
- ↑ IEEE 754 (2008 ، ¶ 2.1.21) يعرف تنسيق الدقة الموسعة بأنه "تنسيق يوسع تنسيقًا أساسيًا مدعومًا من خلال توفير دقة ونطاق أوسع".
- ↑ فرانسيس، سي جي (11 فبراير 1965). "آي بي إم تُطلق حاسوبًا صغيرًا قويًا" . مدير قسم المعلومات (بيان صحفي). وايت بلينز، نيويورك : شركة آي بي إم (شركة آلات الأعمال الدولية). مؤرشف من الأصل بتاريخ 5 يوليو 2019.
- ↑ مكتبة البرامج الفرعية (ملف PDF) . IBM 1130 ( الطبعة التاسعة). شركة IBM. 1974. ص 93.
- ↑ مبادئ التشغيل . نظام IBM/360 ( الطبعة التاسعة). شركة IBM. 1970. ص 41.
- ↑ مبادئ تشغيل نظام IBM System/370 ( الطبعة السابعة). شركة IBM. 1980. الصفحات 9-2 – 9-3 .
- ↑ ستيل، مايكل (20 أكتوبر 2008). "أنشئ نسختك الخاصة من مايكروسوفت بيسك لجهاز 6502" . pagetable.com . ص 46. مؤرشف من الأصل بتاريخ 30 مايو 2016. تم الاطلاع عليه بتاريخ 30 مايو 2016 .
- ↑ جمعية مهندسي الكهرباء والإلكترونيات (IEEE) (29 أغسطس 2008). معيار IEEE للحسابات ذات الفاصلة العائمة (تقرير). IEEE. §3.7. doi : 10.1109/IEEESTD.2008.4610935 . ISBN 978-0-7381-5752-8. IEEE Std 754-2008.
- ↑ بروير، كيفن. "تقرير كيفن" . مواد مرجعية IEEE-754 . تم الاسترجاع في 19-02-2012 .
- ↑ عائلة موتورولا MC68000 (ملف PDF) . دليل مرجعي للمبرمج. شركة NXP لأشباه الموصلات. 1992. الصفحات 1-16 ، 1-18 ، 1-23 .
- ↑ عائلة ColdFire (ملف PDF) . دليل مرجعي للمبرمجين. شركة Freescale لأشباه الموصلات. 2005. ص 7-7 .
- ↑ "ورقة بيانات FPA10" (ملف PDF) . chrisacorns.computinghistory.org.uk . شركة GEC Plessey لأشباه الموصلات. 11 يونيو 1993. تاريخ الاطلاع: 26 نوفمبر 2020 .
- 1 2 كاهان، ويليام (1 أكتوبر 1997). "ملاحظات المحاضرة حول حالة معيار IEEE 754 للحساب الثنائي ذي الفاصلة العائمة" (PDF) .
- ↑ كاهان، ويليام (1 أكتوبر 1997). "ملاحظات محاضرة حول حالة معيار IEEE 754 للحساب الثنائي ذي الفاصلة العائمة" (ملف PDF) . ص 5.
- ↑ إينارسون، بو (2005). الدقة والموثوقية في الحوسبة العلمية . SIAM. ص 9 وما بعدها. ISBN 978-0-89871-815-7تم الاطلاع عليه بتاريخ 3 مايو 2013 .
- ↑ "معماريات Intel 64 و IA-32" . دليل مطوري البرامج. شركة Intel. مارس 2012. §8.2.
- ↑ كونين، جيروم ت. (يناير 1980). "دليل تنفيذي لمعيار مقترح للحسابات ذات الفاصلة العائمة". مجلة IEEE Computer . 13 : 68-79 . doi : 10.1109/MC.1980.1653344 . S2CID 206445847 .
- ↑ كاهان، ويليام (22 نوفمبر 1983). "الرياضيات المكتوبة على الرمل - جهاز hp-15C، إنتل 8087، إلخ" (ملف PDF) .
- ↑ غولدبيرغ، ديفيد (مارس 1991). "ما يجب أن يعرفه كل عالم حاسوب عن حسابات الفاصلة العائمة" (ملف PDF) . مجلة ACM Computing Surveys . 23 (1): 192. doi : 10.1145/103162.103163 . S2CID 222008826 .
- ↑ هايام، نيكولاس (2002). "تصميم خوارزميات مستقرة". دقة واستقرار الخوارزميات العددية ( الطبعة الثانية). جمعية الرياضيات الصناعية والتطبيقية (SIAM). ص 43.
- ↑ معالج الرياضيات المساعد 80C187 ذو 80 بت (ملف PDF) (ورقة البيانات). شركة إنتل . نوفمبر 1992. ص 4. تاريخ الاسترجاع: 24 أغسطس 2024 .
- ↑ دليل مطوري معمارية Intel 64 و IA-32 (ملف PDF) . المجلد 1: المعمارية الأساسية. شركة Intel . يونيو 2024. القسم 4.2.2 أنواع بيانات الفاصلة العائمة، القسم 4.8 الأعداد الحقيقية وتنسيقات الفاصلة العائمة . تاريخ الاسترجاع: 24 أغسطس 2024 . تتوفر مجلدات أخرى في أدلة مطوري البرامج الخاصة بهندسة Intel 64 و IA-32 .
- ↑ بالمر ، جون ف.؛ مورس، ستيفن ب. (1984). دليل 8087 التمهيدي . دار وايلي للنشر. ص 14. ISBN 0-471-87569-4.
- ↑ مورس، ستيفن ب.؛ ألبرت، دوغلاس ج. (1986). هندسة 80286. دار وايلي للنشر. الصفحات 91-111 . ISBN 0-471-83185-9.
- ↑ دليل مطوري معمارية Intel 64 و IA-32 (تقرير). المجلد 1. شركة Intel . الصفحات 8-21 إلى 8-22.
- ↑ سيفرانس، تشارلز (20 فبراير 1998). "مقابلة مع رائد نظام الفاصلة العائمة" . eecs.berkeley.edu . جامعة كاليفورنيا، بيركلي .
- ↑ بالمر ، جون ف.؛ مورس، ستيفن ب. (1984). دليل 8087 التمهيدي . دار وايلي للنشر. ص 16. ISBN 0-471-87569-4.
- 1 2 مورس، ستيفن ب.؛ ألبرت، دوغلاس ج. (1986). هندسة 80286. دار وايلي للنشر. ص 96-98 . ISBN 0-471-83185-9.
- ↑ هوف، ديفيد (مارس 1981). "تطبيقات معيار IEEE 754 المقترح للحسابات ذات الفاصلة العائمة". مجلة IEEE Computer . 14 (3): 70-74 . doi : 10.1109/CM.1981.220381 . S2CID 14645749 .
- ↑ كونين، جيروم ت. (يناير 1980). "دليل تنفيذي لمعيار مقترح للحسابات ذات الفاصلة العائمة". مجلة IEEE Computer : 68-79 . doi : 10.1109/MC.1980.1653344 . S2CID 206445847 .
- ↑ ديميل، جيمس ؛ هيدا، يوزو؛ كاهان، ويليام ؛ لي، شياوي س .؛ موخرجي، سونيل؛ ريدى، إي. جيسون (يونيو 2006). "حدود الخطأ من التحسين التكراري فائق الدقة" (ملف PDF) . معاملات ACM في البرمجيات الرياضية . 32 (2): 325-351 . doi : 10.1145/1141885.1141894 . S2CID 1340891. تاريخ الاسترجاع: 18 أبريل 2014 .
- ↑ "الأنواع العائمة (باستخدام مجموعة مترجمات GNU (GCC))" .
- ↑ "يختلف نوع البيانات الموسع على المنصات المختلفة" .
- الحساب الحاسوبي
- أنواع البيانات ذات الفاصلة العائمة
