现状& TR2 W.R.T.的内容C ++规范

时间:2011-01-13 18:11:53

标签: c++ c++11 standards c++-tr2

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

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

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

预赛:

  1. 当前的C ++标准没有提到浮点值的实际二进制表示。它所说的是浮点表示是“实现定义的”。在实践中,我所知道的每个实现都使用IEEE 754-2008。但这不是标准的要求。
  2. TR2标识要添加到该语言的新类型:decimal32decimal64decimal128
  3. 问题/评论要点:

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

3 个答案:

答案 0 :(得分: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::decimal32,64和128.请参阅decimalN链接在表here.
  4. 目前的C ++ 0x草案中没有这些提案的迹象。也许在下一个标准中,但即使是委员会成员也不会告诉你什么时候出来。
  5. 当我进行快速网络搜索时,我没有看到任何提及此特定草稿的十进制库,但如果你只需要一个库,那里有一些。

答案 1 :(得分:2)

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

在说明这可以在库中完成之后,接下来的问题是它是否应该在标准库中。毕竟这是一个有用的专业领域。最常见的域名,财务,实际上并不需要它(它们确实需要十进制定点,而不是十进制浮点数)。在反馈之后,IBM没有进一步推动他们的提案。

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

答案 2 :(得分:1)

decNumber++是IBM的参考实现。