الدقة المزدوجة الطويلة الفعلية لا تتفق مع std :: numeric_limits

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

سؤال

العمل على Mac OS X 10.6.2 ، Intel ، مع i686-apple-darwin10-g ++-4.2.1 ، وتجميع مع علامة -ARCH x86_64 ، لاحظت ذلك فقط أثناء ...

std::numeric_limits<long double>::max_exponent10 = 4932

... كما هو متوقع ، عندما يتم تعيين مضاعفة طويلة في الواقع على قيمة مع الأسعار أكبر من 308 ، يصبح INF-في الواقع لديه فقط 64 بت بدلا من 80bit.

ايضا، sizeof() يظهر الزوجي الطويل ليكون 16 بايت ، وهو ما ينبغي أن يكون.

وأخيرا ، باستخدام <limits.h> يعطي نفس النتائج مثل <limits>.

هل يعرف أي شخص أين قد يكون التناقض؟

long double x = 1e308, y = 1e309;  
cout << std::numeric_limits<long double>::max_exponent10 << endl;  
cout << x << '\t' << y << endl;  
cout << sizeof(x) << endl;

يعطي

4932
1E+308 Inf
16

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

المحلول

انه بسبب 1e309 هو حرفي يعطي مزدوج. تحتاج إلى استخدام حرفي طويل الأجل 1e309L.

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