0

在 IEEE 754 提供的精度方面,拥有 32 位或 64 位 CPU 有什么不同吗?

我的意思是在 C 中编程时, 32 位或 64 位 CPU 之间的大小float和大小是否不同doublelong double

4

4 回答 4

4

在大多数使用 IEEE-754 的体系结构中,float精确double的 32 位和 64 位类型分别对应于单精度和双精度。因此,无论您使用的是 32 位还是 64 位计算机,精度都是相同的。例外情况是一些具有不符合标准的 C 编译器的微控制器,其中doublefloat相同并且包含 32 位

OTOHlong double支持因系统而异。在 x86 上,大多数实现将使用硬件80 位扩展精度类型(通常填充到 12 或 16 个字节以保持对齐),除了 MSVC,long double它只是double. 在其他架构long double上,通常实现为

  1. 与 相同的类型double,或
  2. 128 位IEEE 754-2008 四倍精度,或
  3. 128位双双

虽然与 相比,第二种方式显着增加了范围和精度double,但由于缺乏硬件支持,它通常也显着变慢

double-double方法产生的类型在相同范围内但精度是 的两倍double,具有硬件double支持的优势,即您不需要像四倍精度那样完全在软件中实现。但是它不符合 IEEE-754

如果您在上进行大量数学运算,则迁移到 64 位将受益,因为寄存器数量增加,SSE2/Neon 默认可用......与 32 位版本相比,它提高了性能,不像由于指针较大,大多数其他 64 位程序运行速度通常较慢的体系结构。

于 2013-07-28T02:52:50.860 回答
2

大多数 32 位和 64 位机器常见的float是 IEEE-754 32 位浮点和doubleIEEE-754 64 位浮点。一些实现可能使用 IEEE-754 80 位类型作为双精度(或长双精度)。

于 2013-07-24T16:29:57.720 回答
1

不,没有区别,您可以通过检查sizeof(float)两种架构来确认这一点。如果您需要更高的精度,请使用double.

于 2013-07-24T16:26:42.540 回答
1

假设float分别double映射到 IEEE-754 单精度和双精度数,那么不,没有区别。

long double但是,可能是另一回事,因为编译器可能会选择将其填充到均匀的大小。

于 2013-07-24T16:27:56.680 回答