Closed
[Documentation|文档反馈]: aclnnCos 资料把 FLOAT16 的精度保证范围写成 [-10^7,10^7](超出 fp16 上限 65504 达 152.7 倍) #4213
liuhanwen8Add on 12 days agoClosed at 1 day ago
12 days ago Added label: documentation
陈思
11 days ago Comments:
11 days ago Comments:
您好,感谢反馈!核对 cann/ops-math@ae087b184,约束说明确实把多种 dtype 合并为 [-10^7,10^7],没有显式区分 FLOAT16 自身的有限表示范围;分类型说明会更清楚。
需要同时区分“构造张量前的实数”和“算子实际收到的值”:FLOAT16 最大有限值是 65504,65505 转成 FLOAT16 后会舍入到 65504,因此此时应比较 cos(65504);1e5 转换后若为 inf,算子实际收到的已不是原先有限的 1e5。您列出的这两类结果不能单独证明 Cos 对其实际有限输入计算错误,也不能把 cos(inf) 的 NaN 视为有限范围精度保证被违反。
一个可行的资料澄清方向是按 dtype 分开写,并将精度保证限定为“该类型可表示的有限输入与算法精度范围的交集”,说明输入转换的舍入/溢出与算子计算精度是两回事。FLOAT16 的有限表示上界可以明确为 65504,但是否对该整个有限区间满足特定误差标准,仍应依据对应产品实现和验证口径,不能仅由静态脚本重新作出保证。我们会继续评估这部分表述的一致性。


11 days ago Assign chen_0715 as responsible person
11 days ago Added label: pending-confirmation
11 days ago Removed label: pending-confirmation
11 days ago Assign sakuraqqz as responsible person
11 days ago Removed responsible person chen_0715
1 day ago Close issue
1 day ago changed custom state from 进行中 to 已完成
1 day ago Added label: resolved
现象
math/cos/docs/aclnnCos&aclnnInplaceCos.md:371把 FLOAT16 的精度保证范围写成[-10^7, 10^7],但 fp16 的最大有限值只有 65504。原文:
1e7 / 65504 = 152.7倍。用户按字面构造|x| ∈ (65504, 1e7]的 FLOAT16 输入会先溢出成inf,与「满足精度要求」直接冲突。期望
按 dtype 拆开书写(参照同文档
:374的 310P 段已正确写成[-65504, 65504]):[-10^7, 10^7][-65504, 65504]复现
# repro_fp16_range.py —— 退出码 1 = 缺陷成立 import math, re, sys DOC = "math/cos/docs/aclnnCos&aclnnInplaceCos.md" text = open(DOC, encoding="utf-8").read() pat = re.compile(r"FLOAT、FLOAT16、BFLOAT16数据类型的输入数据范围为\[?-?10\^7,?\s?10\^7\]?") hits = [(i + 1, ln) for i, ln in enumerate(text.splitlines()) if pat.search(ln)] assert hits, "未找到该声明" lineno, line = hits[0] print("[INFO] 命中 %s:%d" % (DOC, lineno)) import numpy as np stored = float(np.float16(1.0e5)) # 声明区间内的一个值 print("[INFO] fp16(1e5) = %s" % stored) if math.isinf(stored): print("[DEFECT] %s:%d 把 FLOAT16 精度上界写成 1e7,fp16 上限仅 65504" % (DOC, lineno)) sys.exit(1) sys.exit(0)实测输出(CANN 9.2.0 / Atlas 910B2):
上板佐证(
aclnnInplaceCos,inputRef 单形参):65504-0.2205810546875cos(65504) = -0.22054805565505-0.2205810546875-0.939913318)1e5naninf,输出cos(inf)=nan1e6/1e7nan环境
/usr/local/Ascend),Atlas 910B2,npu-smi 26.1.1master,math/cos