所有主要开发系统(Windows,Linux和Mac)上的float或double的格式和大小是否相同?
有没有办法确保它们彼此兼容?例如,我可以通过使用int32_t作为类型而不是int来确保int是32位,但是对于float和double有没有类似的技术?
答案 0 :(得分:1)
没有没有:
1)格式:取决于您架构的 endianness 。
2)尺寸:double
的强制要求不小于float
。其他任何事情都是允许的。
参见C标准:
§6.2.5.10
有三种真正的浮动类型,指定为float,double和 长双。 float类型的值集是其中的一个子集 double类型的值集; double类型的值集 是long double类型的值集的子集。
答案 1 :(得分:0)
这取决于“主要开发系统”的含义。 Windows和大多数Unix系统使用IEEE float和double,所以它们 将使用相同的格式。大多数大型机(包括IBM)都在使用 其他一些格式。
真正的问题是你需要兼容性的原因。如果你是
担心可移植性,你不使用int32_t
,因为
还有一些平台不支持它。更多
通常情况下,除了特殊情况外,您应该使用
int
,并根据涉及的表达式验证输入
INT_MAX
和INT_MIN
以确保不会发生溢出。