【问题标题】:Double - IEEE 754 alternatives双 - IEEE 754 替代品
【发布时间】:2012-03-14 04:19:43
【问题描述】:

根据以下网站: http://en.cppreference.com/w/cpp/language/types

“double - 双精度浮点类型。通常为 IEEE-754 64 位浮点类型”。

它说“通常”。 C++ double 可以使用哪些其他可能的格式/标准?什么编译器使用 IEEE 格式的替代方案?还是建筑?

【问题讨论】:

  • 我认为所有的例外都会很老。例如,我使用了具有 60 位浮点的 Control Data Cyber​​。
  • 根据repository of all knowledge:一些 IBM 和 Cray 大型机,以及 80 年代初之前的任何东西,使用非 IEEE 格式。
  • 任何符合 C++ 标准的都可以。
  • 你也可以使用编译器开关 -ffast-math 禁用 ieee754(至少对于 gcc/clang,mvc 有类似的选项)。
  • @krynr:这将禁用 IEEE754 评估规则,但您仍将拥有 IEEE754 格式 doubles

标签: c++ ieee-754


【解决方案1】:

Vaxen、Crays 和 IBM 大型机,仅举几例仍在相当广泛使用中的例子。大多数(全部?)现在也可以做 IEEE 浮点,但有时只能使用特殊的附加组件。在其他情况下 (IBM) IEEE 算法可能会带来显着的速度损失。

至于较旧的机器,大多数大型机(Unisys、Control Data 等)使用独特的浮点格式,其中大多数甚至不像 IEEE,更不用说真正符合标准了。

【讨论】:

    【解决方案2】:

    对于简短的历史课程,您可以查看Intel Floating Point Case Study

    英特尔编译器有一个在优化时默认启用的选项,它启用所谓的fast-math feature。这使数学运算速度更快,但严格遵守 IEEE 标准。可以强制遵守fp-model option 的严格标准。

    如果愿意放弃严格遵守 IEEE 标准,我相信 NVidia GPU 的 CUDA 语言也有一个明显更快的数学库。这不仅使数学运算更快,而且尤其减少了用于超越函数的寄存器数量。

    是否需要合规取决于具体情况。我们在 Intel 优化方面遇到了问题,不得不打开 fp-model strict 选项以确保双精度数学的正确结果。

    【讨论】:

      【解决方案3】:

      似乎当今大多数计算机都使用 IEEE-754。但之前似乎已经有了替代品。之前已经使用过像excess 128 和packed BCD 这样的格式(http://aplawrence.com/Basics/floatingpoint.html)。维基百科条目也列出了一些http://en.wikipedia.org/wiki/Floating_point

      【讨论】:

        【解决方案4】:

        在回答“C++ 可以同时使用哪些其他可能的格式/标准?”时,可能值得补充的是,用于 Atmel AVR(在某些 Arduino 中使用的 8 位数据 CPU)的 gcc 没有实现 double为 64 位。

        查看GCC wiki, avr-gcc page,特别是上面写着的'double' subsection of 'Deviations from the Standard'

        double 只有 32 位宽,实现方式与 float

        我相信其他 CPU 也有类似的实现,但我找不到。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多