IEEE 754和浮点精度

时间:2013-07-24 16:22:33

标签: c floating-point cpu 32bit-64bit ieee-754

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

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

4 个答案:

答案 0 :(得分:4)

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

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

  1. double相同的类型,或
  2. 128位IEEE 754-2008 quadruple precision
  3. 128位double-double
  4. 虽然第二种方式与double相比显着增加了范围和精度,但由于缺乏硬件支持,它通常也会显着变慢

    double-double方法导致类型的范围相同,但精度是double的两倍,具有硬件double支持的优势,即您无需实现完全像四倍精度的软件。但它不符合IEEE-754

    如果你在上进行了大量的数学计算,那么由于寄存器数量的增加,转移到64位会有所帮助,默认情况下SSE2 / Neon可用...与32位版本相比,性能有所提高,与大多数其他64位程序由于指针较大而运行速度较慢的架构不同。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

然而,

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