【发布时间】:2013-07-24 06:14:09
【问题描述】:
32 位或 64 位 CPU 在 IEEE 754 提供的精度方面有什么不同吗?
我的意思是在 C 中编程时,float、double 和 long double 的大小在 32 位或 64 位 CPU 之间是否不同。
【问题讨论】:
标签: c floating-point cpu 32bit-64bit ieee-754
32 位或 64 位 CPU 在 IEEE 754 提供的精度方面有什么不同吗?
我的意思是在 C 中编程时,float、double 和 long double 的大小在 32 位或 64 位 CPU 之间是否不同。
【问题讨论】:
标签: c floating-point cpu 32bit-64bit ieee-754
不,没有区别,您可以通过检查两种架构的sizeof(float) 来确认这一点。如果您需要更高的精度,请使用double。
【讨论】:
double 64 位的性能应该比 32 位更快,这取决于你在做什么,因为双精度值是 64 位长。它还取决于 FPU。
假设float和double分别映射到IEEE-754单精度和双精度数,那么不,没有区别。
long double 可能是另一回事,因为编译器可能会选择将其填充到均匀大小。
【讨论】:
对于大多数 32 位和 64 位机器来说,float 是 IEEE-754 32 位浮点数,double 是 IEEE-754 64 位浮点数是很常见的。某些实现可能使用 IEEE-754 80 位类型作为双精度(或长双精度)。
【讨论】:
在大多数使用 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 位程序通常由于指针较大而运行速度较慢。
【讨论】: