man*_*ans 24 c c++ floating-point 64-bit x86
我正在寻找是否有任何类似的标准类型uint32_t
总是映射到32位无符号整数类型,但我找不到任何.
float
所有平台上的大小总是4字节?
大小double
总是8?
两种标准都有关于此事的任何说法吗?
我想确保我的大小在所有平台(x86和x64)上总是相同的,所以我使用标准的int类型,但我找不到任何类似的typedef for float
和double
.
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__
.
如果定义了宏,不仅更好地指定了类型(float
32位,double
其他是64位),而且更加指定了内置运算符和标准函数的行为.
缺乏宏不提供任何保证.
对于x86和x86_64(amd64),您可以依赖于类型float
并double
符合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)的特化应指定实现的每种算术类型的最大值和最小值.
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
我不确定这些案例的例外情况.
由于浮点运算是由 CPU 在低级别实现的,因此 C++ 标准不强制规定 a 或float
的double
大小long double
。它只是说我指定它们的顺序是精度相同或递增的顺序。
最好的选择是仔细使用static_assert
、sizeof
和来定义跨平台浮点类型typedef
。#define