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