在 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 位浮点和doubleIEEE-754 64 位浮点。一些实现可能使用 IEEE-754 80 位类型作为双精度(或长双精度)。
不,没有区别,您可以通过检查sizeof(float)两种架构来确认这一点。如果您需要更高的精度,请使用double.
假设float分别double映射到 IEEE-754 单精度和双精度数,那么不,没有区别。
long double但是,可能是另一回事,因为编译器可能会选择将其填充到均匀的大小。