ما هي التطبيقات/الفوائد لنوع البيانات ذات الدقة الموسعة 80 بت؟

StackOverflow https://stackoverflow.com/questions/612507

  •  03-07-2019
  •  | 
  •  

سؤال

نعم، قصدت أن أقول 80 بت.هذا ليس خطأ مطبعي...

تجربتي مع متغيرات الفاصلة العائمة تضمنت دائمًا مضاعفات 4 بايت، مثل الفردي (32 بت)، والمضاعف (64 بت)، والمضاعف الطويل (الذي رأيت أنه يشار إليه إما 96 بت أو 128 بت).ولهذا السبب كنت في حيرة من أمري عندما صادفت نوع بيانات ممتد بدقة 80 بت بينما كنت أعمل على بعض التعليمات البرمجية للقراءة والكتابة إليها ملفات AIFF (تنسيق ملف تبادل الصوت).:تم اختيار متغير دقة ممتد لتخزين معدل أخذ العينات للمسار الصوتي.

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

هناك شيء واحد لم أصادفه وهو التطبيقات المحددة التي تستخدم أنواع بيانات موسعة الدقة (باستثناء معدلات أخذ عينات ملفات AIFF بالطبع).وهذا دفعني إلى التساؤل:

  • هل واجه أي شخص موقفًا كانت فيه الدقة الموسعة ضرورية/مفيدة لبعض تطبيقات البرمجة؟
  • ما هي فوائد رقم الفاصلة العائمة 80 بت، بخلاف ما هو واضح "إنه أكثر دقة قليلاً من البايتات المزدوجة ولكن أقل من معظم تطبيقات المضاعفة الطويلة"؟
  • فهل تضاءلت إمكانية تطبيقه؟
هل كانت مفيدة؟

المحلول

تستخدم وحدات FPU من Intel تنسيق 80 بت داخليًا للحصول على مزيد من الدقة للنتائج المتوسطة.

أي أنه قد يكون لديك متغيرات 32 بت أو 64 بت، ولكن عندما يتم تحميلها في سجلات FPU، يتم تحويلها إلى 80 بت؛تقوم FPU (افتراضيًا) بإجراء جميع العمليات الحسابية في 80 لكن؛بعد الحساب، يتم تخزين النتيجة مرة أخرى في متغيرات 32 بت أو 64 بت.

راجع للشغل - إحدى النتائج المؤسفة إلى حد ما لذلك هي أن تصميمات التصحيح والإصدار قد تؤدي إلى نتائج مختلفة قليلاً:في بناء الإصدار، قد يحتفظ المحسن بمتغير متوسط ​​في سجل FPU 80 بت، بينما في بناء التصحيح، سيتم تخزينه في متغير 64 بت، مما يتسبب في فقدان الدقة.يمكنك تجنب ذلك باستخدام متغيرات 80 بت، أو استخدام مفتاح FPU (أو خيار المترجم) لإجراء كافة العمليات الحسابية في 64 بت.

نصائح أخرى

بالنسبة لي، يعد استخدام 80 بت أمرًا ضروريًا.بهذه الطريقة أحصل على قيم ذاتية ومتجهات ذاتية عالية الترتيب (30000) للمصفوفات المتماثلة مع أربعة أرقام إضافية عند استخدام مكتبة GOTO للمنتجات الداخلية المتجهة، أي 13 بدلاً من 9 أرقام مهمة لنوع المصفوفات التي أستخدمها في النسبية الذرية الحسابات، وهو أمر ضروري لتجنب الوقوع في بحر حالات الطاقة السلبية.خياري الآخر هو استخدام العمليات الحسابية ذات الدقة الرباعية التي تزيد من وقت وحدة المعالجة المركزية 60-70 مرة وتزيد أيضًا من متطلبات ذاكرة الوصول العشوائي.إن أي حساب يعتمد على المنتجات الداخلية للناقلات الكبيرة سيستفيد.بالطبع، من أجل الاحتفاظ بنتائج المنتج الداخلي الجزئية داخل السجلات، من الضروري استخدام لغة التجميع، كما هو الحال في مكتبات GOTO.هذه هي الطريقة التي أحببت بها معالجاتي Opteron 850 القديمة، والتي سأستخدمها طالما أنها تستمر في هذا الجزء من حساباتي.

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

توضح ويكيبيديا أن تنسيق 80 بت يمكن أن يمثل عددًا صحيحًا 64 بت بالكامل دون فقدان المعلومات.وبالتالي يمكن استخدام وحدة الفاصلة العائمة لوحدة المعالجة المركزية لتنفيذ الضرب والقسمة للأعداد الصحيحة.

ميزة أخرى لم يتم ذكرها بعد لأنواع 80 بت هي أنه في المعالجات 16 بت أو 32 بت التي لا تحتوي على وحدات الفاصلة العائمة ولكن لديها تعليمات "مضاعف" تنتج نتيجة ضعف طول المعاملات (16x16 ->32 أو 32x32->64)، فإن الحساب على الجزء العشري 64 بت المقسم إلى أربعة أو اثنين من السجلات 16 بت أو 32 بت سيكون أسرع من الحساب على الجزء العشري 53 بت الذي يمتد على نفس العدد من السجلات ولكن لديه لمشاركة 12 بتة تسجيل مع العلامة والأس.بالنسبة للتطبيقات التي لا تحتاج إلى أي شيء أكثر دقة من float, ، يمكن أيضًا أن تكون العمليات الحسابية على نوع "تعويم ممتد" 48 بت أسرع من العمليات الحسابية على 32 بت float.

في حين أن بعض الأشخاص قد يتذمرون من سلوك التقريب المزدوج للأنواع ذات الدقة الموسعة، فإن هذا يمثل مشكلة من الناحية الواقعية فقط في التطبيقات المتخصصة التي تتطلب إمكانية إعادة إنتاج كاملة عبر الأنظمة الأساسية بدقة بت كاملة.من دقة من وجهة نظر، فإن الفرق بين خطأ التقريب 64/128 مقابل 65/128، أو 1024/2048ulp مقابل 1025/2048، ليس مشكلة؛في اللغات مع أنواع متغيرة الدقة الموسعة و دلالات متسقة موسعة الدقة, ، استخدام الأنواع الموسعة على العديد من الأنظمة الأساسية بدون أجهزة الفاصلة العائمة (على سبيل المثال.الأنظمة المدمجة) ستوفر دقة أعلى وسرعة أفضل من أنواع الفاصلة العائمة ذات الدقة الفردية أو المزدوجة.

لقد استخدمت 80 بت لبعض أبحاث الرياضيات البحتة.كان علي أن أجمع الحدود في سلسلة لا نهائية أصبحت كبيرة جدًا، خارج نطاق الزوجي.لم يكن التقارب والدقة موضع اهتمام، بل كان مجرد القدرة على التعامل مع الأسس الكبيرة مثل 1E1000.ربما كان من الممكن لبعض الجبر الذكي أن يبسط الأمور، ولكن كان من الأسرع والأسهل مجرد تشفير خوارزمية بدقة موسعة، بدلاً من قضاء أي وقت في التفكير فيها.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top