For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/year/pending/proposal-fma.md.
  • 简体中文
  • Fused Multiply-Add S2

    中文标题:融合乘加

    提案概览
    提案速览

    该提案将融合乘加运算添加到 ECMAScript,该运算以单次舍入步骤计算 x × y + z,避免了中间舍入误差。这是一种标准的 IEEE 754 运算,得到现代硬件支持,并已在许多编程语言中实现,有助于点积和矩阵乘法等数值算法。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    融合乘加

    阶段:2

    倡导者:Waldemar Horwat @waldemarhorwat

    规范草案

    融合乘加是一种三操作数的 IEEE 浮点运算,执行计算 $x × y + z$,乘积没有中间舍入——只有最终结果被舍入。它是一种标准运算,得到现代浮点硬件的支持,并且是 IEEE 754-2019 所要求的。

    背景

    IEEE 754 标准除了其他类型的运算外,还要求六种基本算术运算:+、-、×、/、平方根和融合乘加。前五种是原有的,而融合乘加在 IEEE 754-2008 中添加。

    ECMAScript 从一开始就实现了前五种运算,但在 2008 年更新 IEEE 754 规范时没有包含融合乘加。我们建议将其添加到该语言中。

    融合乘加在其他主要编程语言中受到 IEEE 754 语义的支持,包括:

    用法

    融合乘加,一种现代硬件支持的基本浮点指令,对许多数值算法的正确性和性能至关重要。它在 ECMAScript 中的缺失对试图移植在其他语言中使用它的代码的人提出了挑战——融合乘加很难作为库实现,需要数百行缓慢而棘手的代码。

    常见用途包括计算点积、矩阵乘法、多项式求值以及神经网络应用。

    对于一个简单的使用融合乘加的例子,以下是如何计算 Number $a$ 和 $b$ 的精确乘积而无需舍入:

    let high = a * b (使用标准 IEEE 754 乘法)

    let err = Math.fma(a, b, -high)

    此时,除非 Number 的指数范围发生上溢或下溢,否则 $MV(a) × MV(b) = MV(high) + MV(err)$,其中 $high$ 包含结果的最高有效位,$err$ 包含结果的最低有效位。