首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC与MSVC的digits10差异

GCC与MSVC的digits10差异
EN

Stack Overflow用户
提问于 2011-05-08 06:21:13
回答 2查看 646关注 0票数 5

我有以下代码:

代码语言:javascript
复制
#include <iostream>
#include <limits>

int main()
{
   std::cout << std::numeric_limits<unsigned long long>::digits10 << std::endl;
   return 0;
}

  • GCC 4.4返回19
  • MS对9.0返回18

有人能解释一下为什么两者之间有区别吗?我本以为无论编译器如何,这样的常数都是相同的。

EN

回答 2

Stack Overflow用户

发布于 2011-05-08 06:26:43

numeric_limits::digits10指定小数点左侧的小数位数,这些数字可以在不丢失精度的情况下表示。因此,我猜根据它们的实现细节,编译器和编译器之间可能会有所不同。

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 06:55:46

总的来说,声明

无论编译器如何,

I都希望这样的常量是相同的。

因为C中类型的大小不是固定的,所以不正确。标准只规定最低限度,编译器可以自由使用更广泛的类型。例如,在32位或64位计算机上的一些奇怪的编译器可能有CHAR_BIT = 9unsigned long long不再是64位,或者它可能使用不同的1的补码或其他一些数字编码。简而言之,结果可能因编译器而异。

但是,如果unsigned long long是64位类型,那么它肯定是一个bug。我刚检查了一下,发现这个bug在VS 2008中已经修复了。返回正确的值19。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5925951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档