سؤال

على الرغم من أنه بسيط، إلا أنني لم أتمكن من العثور عليه من خلال جوجل.كما نعلم أن تمثيل النقطة العائمة يدعم نطاقًا أكبر من الأرقام وتكون العملية أبطأ من الأعداد الصحيحة الخالصة.نحن نعلم أيضًا كيفية استخدام الجزء العشري والأسس لتمثيل النقطة العائمة.لكن سؤالي هو، على سبيل المثال، في نظام 32 بت، هل يكون الإخراج أطول من 32 بت أو 32 بت؟(حيث s=مهم، b=الأساس،e=الأس)

هل كانت مفيدة؟

المحلول

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

هناك معيار واحد مهيمن للغاية: IEEE النقطة العائمة, ، وبحسب هذا السؤال ذو الصلة بـ SO جميع وحدات المعالجة المركزية الرئيسية التي من المحتمل أن تقابلها اليوم تنفذها، بما في ذلك IA32.

وفقًا لويكيبيديا، يتطلب IEEE Floating Point أن يكون واحدًا على الأقل مما يلي متاحًا في أي تطبيق:

  • ثنائي32:الجزء العشري 24 بت (بما في ذلك بت الإشارة 1) والأس 8 بت
  • ثنائي64:الجزء العشري 53 بت (بما في ذلك بت إشارة واحدة) والأس 11 بت

على افتراض أنه بحلول 32 بت تقصد عائلة اي ايه 32 (وهي واحدة فقط من البنى القليلة التي تستخدم 32 بت)، ثم تسجل النقطة العائمة يمكن أن تحتوي على ما يصل إلى 80 بت, مما يعني أنه يمكن دعم تنسيق ثنائي 32 وثنائي 64 وتنسيق 80 بت غير IEC مع 15 بت أس.للتمييز بين تعليمات 32 بت و64 بت، يستخدم معظم المجمعين معدّلات الحجم مثل QWORD أو DWORD.

أيضًا، إلى جانب تطبيقات وحدة المعالجة المركزية (CPU)، يمكن أن تتطلب اللغات أيضًا التوافق مع IEEE Floating Point.في لغة C على سبيل المثال، يحدد الملحق 7 أنه إذا كان الماكرو __STDC_IEC_599__ يتم تعريفه تلقائيًا بواسطة المترجم بعد ذلك float مضمون أن يكون ثنائي 32 و double ثنائي64. long double لم يتم تثبيته ليكون IEC، لذلك يمكن بعد ذلك استخدام 80 بت على قوس IA32.

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