【问题标题】:IEEE 754 and float precisionIEEE 754 和浮点精度
【发布时间】:2013-07-24 06:14:09
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 那么 64 位 CPU 对数学应用程序的 C 程序员没有任何优势吗?
    • 不要引用我的话,但是double 64 位的性能应该比 32 位更快,这取决于你在做什么,因为双精度值是 64 位长。它还取决于 FPU。
    • 64 位意味着更宽(更快)的总线。所以那里会有一些速度。 64 位 FPU 也可以更好地处理双精度数。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案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

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

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

        如果您在 上进行大量数学运算,则迁移到 64 位将受益,因为寄存器数量增加,SSE2/Neon 默认可用...与32 位版本,与大多数其他架构不同,64 位程序通常由于指针较大而运行速度较慢。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-06
          • 2011-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-06
          • 2014-10-18
          相关资源
          最近更新 更多