C++ 为什么小数128可能会标准化,而四位精度不会标准化?
这是一个非常幼稚的问题。如果我们查看C和C++标准委员会,他们目前正在致力于增加十进制浮点标准类型:C++ 为什么小数128可能会标准化,而四位精度不会标准化?,c++,c,c++11,floating-point,standards,C++,C,C++11,Floating Point,Standards,这是一个非常幼稚的问题。如果我们查看C和C++标准委员会,他们目前正在致力于增加十进制浮点标准类型: 因此,我们可能会有一个标准化的decimal128类型,而我们还没有任何标准化的binary128类型(四精度,而不是简单的扩展双精度)。这种情况是否有技术原因,或者纯粹是“政治原因”四精度二进制浮点不能替代十进制类型。精度问题仅次于十进制数的表示。我们的想法是在语言中添加一个类型,以支持像0.1这样的数字表示,而不损失任何精度-这是二进制浮点类型无法做到的,无论其精度有多高 这就是为什
因此,我们可能会有一个标准化的
decimal128
类型,而我们还没有任何标准化的binary128
类型(四精度,而不是简单的扩展双精度)。这种情况是否有技术原因,或者纯粹是“政治原因”四精度二进制浮点不能替代十进制类型。精度问题仅次于十进制数的表示。我们的想法是在语言中添加一个类型,以支持像0.1
这样的数字表示,而不损失任何精度-这是二进制浮点类型无法做到的,无论其精度有多高
这就是为什么添加decimal类型的讨论与添加quad precision数据类型的讨论是正交的:这两种类型有不同的用途,正如您链接的其中一个方案中所讨论的:
人类对数值的计算和交流几乎总是使用十进制
算术和十进制符号。实验室记录、科学论文、法律文件、商业文件
报告和财务报表都以十进制形式记录数值。当使用数字数据时
给定给程序或显示给用户,需要从二进制到十进制的转换。
此类转换中存在固有的舍入误差;十进制分数不能,在
一般情况下,可以用二进制浮点值精确表示。这些错误通常会导致可用性问题
和效率问题,取决于应用程序
以下是一些简单的原因,解释了为什么有关于小数128而不是128位二进制浮点的工作:
长双精度
的当前定义非常模糊,似乎任何供应商都不会接受将其当前含义更改为使用IEEE 754(2008)128位语义:这将改变几乎所有实现的行为。我预计,对强制使用IEEE 754进行浮点
和双浮点
的反对意见,也就是说,任何IEEE 754对二进制浮点的支持都将是全新的,需要有人提出。我认为这样的建议会有一些争议,例如,关于使用什么名称以及是否实际添加128位支持,因为大多数用户都希望它得到硬件支持,而从事硬件工作的人似乎有其他优先事项。请注意,没有人期望(或应该期望)十进制浮点的硬件支持:尽管Power7和更高版本的处理器上有硬件支持,但没有其他供应商考虑过这个想法tl;dr:关于正在研究的十进制128位格式和二进制128位格式没有什么政治意义:有一个关于其中一种格式的提案,而不是另一种格式,提案人(me)没有兴趣为这两种格式编写提案。在ISO C中有一些工作支持IEEE 754-2008,这意味着二进制128(以及更多)可以标准化。看见C++应该遵循,那么.< 现在,虽然binary128有时是实现的,但我怀疑它是否会在一段时间之前用于实践,因为当前的实现完全是软件实现的