在不同平台上浮动和加倍

时间:2013-12-12 11:46:48

标签: c++ floating-point double

所有主要开发系统(Windows,Linux和Mac)上的float或double的格式和大小是否相同?

有没有办法确保它们彼此兼容?例如,我可以通过使用int32_t作为类型而不是int来确保int是32位,但是对于float和double有没有类似的技术?

2 个答案:

答案 0 :(得分:1)

没有没有:

1)格式:取决于您架构的 endianness

2)尺寸:double的强制要求不小于float。其他任何事情都是允许的。

参见C标准:

§6.2.5.10

  

有三种真正的浮动类型,指定为float,double和   长双。 float类型的值集是其中的一个子集   double类型的值集; double类型的值集   是long double类型的值集的子集。

另见Any guaranteed minimum sizes for types in C?

答案 1 :(得分:0)

这取决于“主要开发系统”的含义。 Windows和大多数Unix系统使用IEEE float和double,所以它们 将使用相同的格式。大多数大型机(包括IBM)都在使用 其他一些格式。

真正的问题是你需要兼容性的原因。如果你是 担心可移植性,你使用int32_t,因为 还有一些平台不支持它。更多 通常情况下,除了特殊情况外,您应该使用 int,并根据涉及的表达式验证输入 INT_MAXINT_MIN以确保不会发生溢出。