الدقة المزدوجة الطويلة الفعلية لا تتفق مع std :: numeric_limits
-
23-09-2019 - |
سؤال
العمل على 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
.
لا تنتمي إلى StackOverflow