IEEE 754提供的精度达到32位还是64位CPU会有什么不同吗?
我的意思是在用C编程时,float
,double
和long double
的大小是否在32位或64位CPU之间是不同的。
不,没有区别,您可以通过检查两个架构中的sizeof(float)
来确认这一点。如果你需要更高的精度使用double
。
在大多数使用IEEE-754的架构中,float
和double
分别是精确的32位和64位类型,分别对应于单精度和双精度。因此,无论您使用的是32位还是64位计算机,精度都是相同的。一些微控制器与非标准兼容的C编译器例外,其中double
和float
相同且包含32位
OTOH long double
支持因系统而异。在x86上,大多数实现将使用硬件80-bit extended precision类型(通常填充到12或16字节以保持对齐),除了MSZC,其中long double
is just an alias for double
。在其他架构上,long double
通常被实现为
double
相同的类型,或虽然与double
相比,第二种方式显着增加了范围和精度,但由于缺乏硬件支持,它通常也会明显变慢
double-double
方法产生的类型具有相同的范围,但是double
的精度的两倍,具有硬件double
支持的优势,即您不需要完全在四倍精度的软件中实现。但它不符合IEEE-754标准
如果你在x86或arm上进行了大量的数学运算,那么由于寄存器数量的增加,64位将会受益,默认情况下SSE2 / Neon可用...与32位版本相比,这提高了性能,不像大多数其他架构,其中64位程序由于更大的指针而经常运行得更慢。
对于float
来说,大多数32位和64位机器通常是IEEE-754 32位浮点,double
是IEEE-754 64位浮点。某些实现可能使用IEEE-754 80位类型作为double(或long double)。
假设float
和double
分别映射到IEEE-754单精度和双精度数,那么不,没有区别。
然而,long double
可能是一个不同的故事,因为编译器可能会选择将其填充到均匀的大小。