术语:为什么 "floating multiply-add" 而不是 "fused multiply-add"?

Terminology: why "floating multiply-add" instead of "fused multiply-add"?

C11(及更新版本):

7.12.13 Floating multiply-add

IEEE 754-2008:

fused multiply add, fusedMultiplyAdd

Wikipedia:

fused multiply-add

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

这个“浮动”从何而来?

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

通过一些侦探工作,我们可能会深入挖掘 C11 的“Floating multiply-add”的根源,并找出一个非常暗示此命名只是疏忽的差异。 WG14's N1154编程语言 C 的扩展以支持十进制 floating-point 算术 )从 2006 年开始,惯用地将操作描述为 融合 multiply-add算术运算:

9 Arithmetic Operations

[...]

9.2 Functions

The decimal floating point operations square root, min, max, fused multiply-add and remainder, which are defined in IEEE 754R, are implemented as library functions.

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

10 Library

10.1 Decimal mathematics <math.h>

The list of elementary functions specified in the mathematics library is extended to handle decimal floating-point types. These include functions specified in 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, and 7.12.13

[...]

Suggested changes to C99:

Add the following list of function prototypes to the synopsis of the respective subclauses:

[...]

7.12.13 Floating multiply-add

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