【问题标题】:Terminology: why "floating multiply-add" instead of "fused multiply-add"?术语:为什么“浮动乘加”而不是“融合乘加”?
【发布时间】:2022-02-02 12:26:51
【问题描述】:

C11(及更新版本):

7.12.13 浮动乘加

IEEE 754-2008:

融合乘加, fusedMultiplyAdd

Wikipedia:

融合乘加

为什么 C11(及更新版本)使用“浮动乘加”而不是“融合乘加”?

这个“浮动”从何而来?

【问题讨论】:

  • 因为 IEEE-754 委员会密切关注浮点措辞,而 C 委员会的关注程度不同。
  • @EricPostpischil ...难道不是因为C没有为浮点指定IEEE-754吗?标准中的措辞必须足够通用,以便也可用于替代格式(如果我的假设是正确的)
  • @TedLyngmo:不,7.12.13 描述了 fma 操作,甚至 C 标准都说它是通过“作为 one 三元操作”进行舍入的[强调添加],这意味着乘法和加法融合在一起成为一个浮点运算。是否是 IEEE-754 操作与这一点无关。
  • @EricPostpischil 啊,好的,知道了。谢谢!

标签: c floating-point language-lawyer terminology fma


【解决方案1】:

这很可能是技术报告中将这些算术运算引入语言的错误

通过一些侦探工作,我们可能会深入挖掘 C11 的“浮动乘加”的根源,并确定一个差异,这在很大程度上暗示了这个命名只是一个疏忽。 WG14's N1154编程语言 C 的扩展以支持十进制浮点算术)从 2006 年开始惯用地将该操作描述为 融合乘加算术运算:

9 算术运算

[...]

9.2 函数

十进制浮点运算平方根,最小值,最大值,融合 在 IEEE 754R 中定义的乘加和余数是 实现为函数。

仅在相关函数原型的库概要中将 fused 替换为 floating。可以说,在审查库概要时很容易遗漏一个疏忽,即包含函数原型中的缩写 fmad 名称中的 f,很容易被误解为“浮动”,而不是其实际含义“融合”。

10 库

10.1 十进制数学

数学库中指定的初等函数列表 扩展为处理十进制浮点类型。这些包括 7.12.4、7.12.5、7.12.6、7.12.7、7.12.8、7.12.9 中规定的功能, 7.12.10、7.12.11、7.12.12 和 7.12.13

[...]

对 C99 的建议更改:

将以下函数原型列表添加到 相应的子条款:

[...]

7.12.13 浮动乘加

_Decimal64 fmad64(_Decimal64 x, _Decimal64 y, _Decimal64 z);
_Decimal32 fmad32(_Decimal32 x, _Decimal32 y, _Decimal32 z); 
_Decimal128 fmad128(_Decimal128 x, _Decimal128 y, _Decimal128 z);

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2018-08-21
    • 2016-09-23
    • 1970-01-01
    • 2016-03-29
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多