32 位或 64 位 CPU 在 IEEE 754 提供的精度方面有什么不同吗?
我的意思是在用 C 编程时,float
、double
和 long double
的大小在 32 位或 64 位 CPU 之间是否不同.
最佳答案
在大多数使用 IEEE-754 的架构中,float
和 double
是精确的 32 位和 64 位类型,分别对应于单精度和 double 。因此,无论您使用的是 32 位还是 64 位计算机,精度都是一样的。异常(exception)情况是一些带有不符合标准的 C 编译器的微 Controller ,其中 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
相同的类型,或者 - 128 位 IEEE 754-2008 quadruple precision , 或
- 128 位 double-double
虽然与 double
相比,第二种方式显着增加了范围和精度,但由于缺乏硬件支持,它通常也显着变慢
double-double
方法产生一个范围相同但精度是 double
两倍的类型,具有硬件 double
的优势> 支持,即您不需要像四倍精度那样完全在软件中实现。但是它不符合 IEEE-754
如果您在 x86 上做大量数学运算或 arm ,迁移到 64 位会受益,因为寄存器数量增加,默认情况下 SSE2/Neon 可用...与 32 位版本相比,这提高了性能,不像大多数其他架构,64 位程序通常运行速度较慢,因为更大的指针。
关于c - IEEE 754 和浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839616/