C和C++中float和double的大小是多少?

man*_*ans 24 c c++ floating-point 64-bit x86

我正在寻找是否有任何类似的标准类型uint32_t总是映射到32位无符号整数类型,但我找不到任何.

float所有平台上的大小总是4字节?
大小double总是8?

两种标准都有关于此事的任何说法吗?

我想确保我的大小在所有平台(x86和x64)上总是相同的,所以我使用标准的int类型,但我找不到任何类似的typedef for floatdouble.

Ded*_*tor 14

摘录自C99标准,规范性附录F(C++ - 标准没有明确提到这个附件,尽管它包括所有受影响的函数而没有每个引用的更改.此外,类型必须匹配兼容性.):

IEC 60559浮点运算

F.1简介

1本附录规定了对IEC 60559浮点标准的C语言支持.IEC 60559浮点标准特别适用于微处理器系统的二进制浮点算法,第二版(IEC 60559:1989),以前称为IEC 559:1989和IEEE二进制浮点运算标准(ANSI/IEEE 754-1985) ).用于与基数无关的浮点运算的IEEE标准(ANSI/IEEE 854-1987)概括了二进制标准以消除对基数和字长的依赖性.IEC 60559通常是指浮点标准,如IEC 60559操作,IEC 60559格式等.定义的实现__STDC_IEC_559__应符合本附录中的规范.356)如果指示C语言与IEC 60559之间的绑定除非另有说明,否则IEC 60559指定的行为仅供参考.由于负和正无穷大在IEC 60559格式中是可表示的,因此所有实数都在可表示值的范围内.

所以,包括<math.h>(或在C++中<cmath>),并测试__STDC_IEC_559__.

如果定义了宏,不仅更好地指定了类型(float32位,double其他是64位),而且更加指定了内置运算符和标准函数的行为.
缺乏宏不提供任何保证.

对于x86和x86_64(amd64),您可以依赖于类型floatdouble符合IEC-60559标准,但使用它们的函数和对它们的操作可能不是.


Bla*_*nic 12

什么都不说大小.

3.9.1.8

有三种浮点类型:float,double和long double.double类型提供至少与float一样多的精度,long double类型提供至少与double一样多的精度.float类型的值集是double类型的值集的子集; double类型的值集是long double类型的值集的子集.浮点类型的值表示是实现定义的.积分和浮动类型统称为算术类型.标准模板std :: numeric_limits(18.3)的特化应指定实现的每种算术类型的最大值和最小值.


dan*_*nca 9

C++标准没有说什么,但在大多数平台上,C++使用IEEE的单/双精度标准,它将单精度定义为4字节,双精度定义为8字节.

http://en.wikipedia.org/wiki/Single-precision_floating-point_format http://en.wikipedia.org/wiki/Double-precision_floating-point_format

我不确定这些案例的例外情况.


Bat*_*eba 5

由于浮点运算是由 CPU 在低级别实现的,因此 C++ 标准不强制规定 a 或floatdouble大小long double。它只是说我指定它们的顺序是精度相同或递增的顺序。

最好的选择是仔细使用static_assertsizeof和来定义跨平台浮点类型typedef#define