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/proposal-float16array.md.
  • 简体中文
  • Float16 on TypedArrays, DataView, Math.f16round S4

    中文标题:Float16Array:在 TypedArrays、DataView 和 Math.f16round 中支持半精度浮点数

    提案概览
    提案速览

    该提案为 JavaScript 添加 Float16Array 类型化数组、DataView 的 getFloat16/setFloat16 方法以及 Math.f16round,以支持半精度浮点数。它旨在解决 canvas 颜色、GPU 操作、WebGL 和 WebGPU 中不需要全精度且内存有限的用例。

    Note

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

    Float16Array

    一个为 JavaScript 添加 float16(即半精度或 binary16)TypedArrays 的提案。

    状态

    作者:Kevin Gibbons

    提案组:Leo Balter, Kevin Gibbons

    截至 2025 年 2 月会议,此提案已进入 TC39 流程 的 Stage 4:它已完成,已合入 ecma262,并且 正在浏览器中发布。任何进一步讨论应在 其他地方 进行。

    规范文本可在 此处 获取。

    实现

    此提案已准备好供引擎实现和发布。有关实现当前状态的详细信息,请参阅 此 issue

    动机

    • 来自 Web 色彩 CG 的明确请求,用于其 float 支持的 canvas 用例
    • 对 GPU 操作很有用,因为通常不需要全精度,且内存限制很严格。
      • WebGPU 支持 float16。它暴露/消费原始 ArrayBuffers。当这些缓冲区包含 32 位浮点数时,模式 是将缓冲区包装在 new Float32Array(...) 中;但当它们包含 16 位浮点数时,这就不起作用了。
      • 随着像 Stable Diffusion 这样的新工具,越来越相关,在许多机器上全精度表示无法放入 VRAM。
    • WebGL/WebGL2 支持 float16。
    • ARM、IA-32 和 Intel® 64 架构支持 float16 内在函数。
    • 在用户空间中模拟它有 严重的性能成本

    提案

    这将添加一种新的 TypedArray 类型 Float16Array,以补充现有的 Float32ArrayFloat64Array。它还将为 DataView 添加两个新方法,用于读取和设置 float16 值,即 getFloat16setFloat16,以补充现有的用于全精度和双精度浮点数的类似方法,以及 Math.f16round,以补充现有的 Math.fround

    用户空间

    @petramoriken一个实现 Float16Array 的包,在 npm 上每周下载量超过 10 万次。请参阅该仓库以了解纯在用户空间实现此功能的一些限制和缺点的示例 - 特别是无法正确集成其他 web 平台功能,如 WebGLHALF_FLOAT 缓冲区和 structuredClone