IEEE 754和浮点精度

问题描述 投票:0回答:4

IEEE 754提供的精度达到32位还是64位CPU会有什么不同吗?

我的意思是在用C编程时,floatdoublelong double的大小是否在32位或64位CPU之间是不同的。

c floating-point cpu 32bit-64bit ieee-754
4个回答
1
投票

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


4
投票

在大多数使用IEEE-754的架构中,floatdouble分别是精确的32位和64位类型,分别对应于单精度和双精度。因此,无论您使用的是32位还是64位计算机,精度都是相同的。一些微控制器与非标准兼容的C编译器例外,其中doublefloat相同且包含32位

OTOH long double支持因系统而异。在x86上,大多数实现将使用硬件80-bit extended precision类型(通常填充到12或16字节以保持对齐),除了MSZC,其中long double is just an alias for double。在其他架构上,long double通常被实现为

  1. double相同的类型,或
  2. 128位IEEE 754-2008 quadruple precision,或
  3. 128位double-double

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

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

如果你在上进行了大量的数学运算,那么由于寄存器数量的增加,64位将会受益,默认情况下SSE2 / Neon可用...与32位版本相比,这提高了性能,不像大多数其他架构,其中64位程序由于更大的指针而经常运行得更慢。


2
投票

对于float来说,大多数32位和64位机器通常是IEEE-754 32位浮点,double是IEEE-754 64位浮点。某些实现可能使用IEEE-754 80位类型作为double(或long double)。


1
投票

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

然而,long double可能是一个不同的故事,因为编译器可能会选择将其填充到均匀的大小。

© www.soinside.com 2019 - 2024. All rights reserved.