سؤال

بقدر ما أعرف، فإن قيم الفاصلة العائمة هي من الشكل n * 2^e، مع

  • النطاق العائم هو n = -(2^23-1) - (2^23-1)، وe = -126 - 127،
  • النطاق المزدوج هو n = -(2^52-1) - (2^52-1)، وe = -1022 - 1023

كنت أبحث في معيار C++، لكنني فشلت في العثور على المكان الذي يحدد فيه المعيار ذلك، أو يفرض ربط الأنواع المزدوجة العائمة والمزدوجة والطويلة مع النطاقات المحددة في معايير (IEEE) الأخرى.الشيء الوحيد ذي الصلة الذي وجدته في 3.9.1.8 هو:

هناك ثلاثة أنواع من النقاط العائمة:تعويم، مزدوج، ومزدوج طويل.يوفر النوع المزدوج دقة على الأقل مثل التعويم، ويوفر النوع الطويل المزدوج نفس القدر من الدقة على الأقل مثل المزدوج.مجموعة قيم النوع float هي مجموعة فرعية من مجموعة قيم النوع double؛مجموعة قيم النوع المزدوج هي مجموعة فرعية من مجموعة قيم النوع المزدوج الطويل.يتم تحديد تمثيل القيمة لأنواع الفاصلة العائمة من خلال التنفيذ.

ولم يتم ذكر الحد الأدنى للنطاق الذي يوفره النوع.

أين/كيف يحدد المعيار نطاق القيمة (الحد الأدنى؟) لأنواع النقاط العائمة؟أو هل يمكن للمترجم اختيار أي نطاق قيمة بحرية ويظل متوافقًا مع المعايير؟

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

المحلول

تمامًا مثل الحدود الرقمية الصحيحة، حدود float, double و long double يتم استيرادها من معيار C.الحد الأدنى لقيمة الثوابت FLT_MAX, DBL_MAX و LDBL_MAX يكون 1E+37.لهم *_MIN المتغيرات القيمة القصوى هي 1E-37.

نصائح أخرى

ما نقلته هو كل ما هو مضمون بشأن أنواع الفاصلة العائمة في C++.وكما هو مذكور، فإن تمثيلهم محدد بالتنفيذ.

ومع ذلك، يمكنك الاستعلام عن معلومات حول الحدود وما إذا كانت الأنواع هي الأنواع المحددة في IEC 559 (IEEE 754) باستخدام std::numeric_limits قوالب في <limits>.

لا يحدد المعيار مثل هذه الأشياء لأنها غالبًا ما تعتمد على الأجهزة وتتغير بمرور الوقت.في حين أن 32 بت تعتبر اليوم معيارًا، إلا أنه في غضون 10 سنوات قد يبدو القيام بالأشياء في أقل من 64 بت أمرًا مقيتًا.

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