这是一个非常天真的问题。如果我们查看C和C ++标准委员会,他们目前正致力于添加十进制浮点标准类型:
所以看来我们可能会有一个标准化的 decimal128
类型,而我们还没有任何标准化 binary128
类型(四精度而不是简单的扩展双精度)。这种情况有技术原因还是纯粹的“政治”?
这是一个非常天真的问题。如果我们查看C和C ++标准委员会,他们目前正致力于添加十进制浮点标准类型:
所以看来我们可能会有一个标准化的 decimal128
类型,而我们还没有任何标准化 binary128
类型(四精度而不是简单的扩展双精度)。这种情况有技术原因还是纯粹的“政治”?
四精度二进制浮点不能替代十进制类型。精度问题是次要数字表示的次要问题。我们的想法是为语言添加一种类型,以支持数字的表示 0.1
没有任何精度损失 - 无论二进制浮点类型的精度有多高,都无法做到这一点。
这就是为什么添加十进制类型的讨论与添加四精度数据类型的讨论是正交的:这两种类型用于不同的目的,如您链接的一个提案中所讨论的:
人类计算和数值通信几乎总是使用小数 算术和十进制表示法。实验室笔记,科学论文,法律文件,业务 报表和财务报表均以十进制形式记录数值。当数字数据是 给予程序或向用户显示,需要二进制到十进制转换。 这种转换涉及固有的舍入错误;小数部分不能,在 通常,由二进制浮点值精确表示。这些错误通常会导致可用性 和效率问题,取决于应用程序。
以下是有关工作原因的一些简单原因 decimal128
而不是128位的二进制浮点数:
long double
任何供应商似乎不太可能接受改变其当前含义以使用IEEE 754(2008)128位语义:它会改变大致所有实现的行为。我希望有人反对强制使用IEEE 754 float
和 double
,即任何IEEE 754对二进制浮点的支持都是某些人需要提出的全新内容。我希望这样的提议有点争议,例如,关于使用什么名称以及是否实际添加128位支持,因为大多数用户会期望它获得硬件支持并且在硬件上工作的人似乎有其他优先级。请注意,没有人期望(或者应该期望)对十进制浮点的硬件支持:虽然Power7和后来的处理器上有硬件支持,但没有其他供应商在考虑这个想法。tl; dr:没有任何关于十进制128位格式正在处理的政治和二进制128位格式没有:有一个提议而不是另一个提议者(我)没有兴趣为两者写提案。
在ISO C中有一些支持IEEE 754-2008的工作,这意味着binary128(和更多)可能是标准化的。看到 ISO / IEC JTC 1 / SC 22 / WG 14 N1789。那么C ++应该遵循。
现在,尽管有时会实现binary128,但我怀疑它会在一段时间之前在实践中使用,因为当前的实现完全是在软件中(尽管可能会改变),并且有更快,更灵活的方法来获得更准确的结果: 双重算术 或类似的想法(例如浮点扩展,这或多或少是双重算术的推广)。