在IEEE 754提供的精度为32或64位CPU方面有什么不同吗?
我的意思是在用C编程时,float
,double
和long double
的大小是否在32位或64位CPU之间不同。
答案 0 :(得分:4)
在大多数使用IEEE-754的架构中,float
和double
分别是32和64位类型,分别对应于单精度和双精度。因此,无论您使用的是32位还是64位计算机,精度都是相同的。一些微控制器具有非标准兼容的C编译器,其中double
和float
相同且包含32位
OTOH long double
支持因系统而异。在x86上,大多数实现将使用硬件80-bit extended precision类型(通常填充到12或16字节以保持对齐),MSVC除外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位程序由于指针较大而运行速度较慢的架构不同。
答案 1 :(得分:2)
大多数32位和64位计算机通常float
为IEEE-754 32位浮点,double
为IEEE-754 64位浮点。某些实现可能使用IEEE-754 80位类型作为double(或long double)。
答案 2 :(得分:1)
不,没有区别,您可以通过检查两个架构中的sizeof(float)
来确认这一点。如果您需要更高的精确度,请使用double
。
答案 3 :(得分:1)
假设float
和double
分别映射到IEEE-754单精度和双精度数,那么不,没有区别。
long double
可能是一个不同的故事,因为编译器可能会选择将其填充到均匀的大小。