12

参考链接:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf

我正在尝试收集有关 TR2 的信息以及它与即将到来的 C++ 标准的关系(如果有的话)。

到目前为止,这是我的问题。如果我错过了任何重要的问题,请也回答这些问题。:)

预赛:

  1. 当前的 C++ 标准对浮点值的实际二进制表示保持沉默。它只是说浮点表示是“实现定义的”。在实践中,我知道的每个实现都使用IEEE 754-2008。但这不是标准的要求。
  2. TR2 标识要添加到语言中的新类型: decimal32decimal64decimal128

问题/评论点:

  1. 上面的新类型(decimal64等)是语言的原生类型,还是在库中提供?
  2. 新类型是否可以解决浮点不精确的问题?如果是这样,怎么做?
  3. TR2 是否要求这些(或任何)类型使用特定的二进制表示?
  4. TR2 是否会被接受为即将到来的 C++ 标准的一部分?如果有,什么时候?
  5. 这些新类型的实现是否在任何当前可用的库(例如,Boost)中可用?
4

3 回答 3

3

仅供参考,链接的文档不是 TR2。“TR2”指的是一组库扩展,与 TR1 风格相同,而“十进制浮点算术扩展”的草案就是这样。目前还没有TR2草稿,原计划0x之后出。因此,从这里开始,我假设您不是在询问 TR2,而是在询问链接的文档。

  1. 库:然而,草案定义了新的类,在这些类下std::decimal可以轻松地包装平台/实现提供的本机类型。此 TR 未定义十进制文字。
  2. 是: “避免转换错误的最有效方法是使用十进制算术。认识到这一点,IEEE 754-2008 浮点算术标准指定了十进制浮点编码和算术。本技术报告指定了对国际标准的扩展C++ 编程语言允许以符合 IEEE 754-2008 标准的方式使用十进制算术。”
  3. 是: IEEE 754-2008 中定义的三种十进制编码格式分别对应三种十进制浮点类型std::decimal::decimal3264 和 128。请参阅此处decimalN表格中的链接。
  4. 当前的 C++0x 草案中没有这些提议的迹象。也许在下一个标准中,但即使是委员会成员也不能告诉你什么时候会出来。
  5. 当我进行快速网络搜索时,我没有看到任何十进制库提到这个特定的草稿,但如果你只需要一个库,那里有一些。
于 2011-01-13T19:11:53.410 回答
2

我碰巧参加了 IBM 最初向 WG14 和 WG21 提出十进制类型的会议。他们最初的提议是将它们作为本机类型提供,这几乎是 C 中唯一的解决方案。但是,WG21 并不完全相信,并指出 C++ 已经std::complex<>在库中作为数学类型提供了,为什么不std::decimal<>呢?std::decimal当指针指向显然可以包装_Decimal编译器扩展时,关于性能开销的最初混淆很快就结束了。

在指出这可以在库中完成之后,下一个问题是这是否应该在标准库中。毕竟这是一个有用的专业领域。最常见的领域,金融,实际上并不需要它(他们真的需要十进制定点,而不是十进制浮点)。在得到这些反馈之后,IBM 并没有进一步推动他们的提议。

这些类型不能解决浮点不准确的问题。1/3 仍然无法表示。但是,1/5 是。

于 2011-01-14T09:56:53.550 回答
1

decNumber++是 IBM 的参考实现。

于 2011-12-13T10:18:23.197 回答