Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Asinh 算子 arch35 实现对非小值统一使用 log(u) * r / (u - 1) 进行精度补偿。
log(u) * r / (u - 1)
该补偿方式在中大数值区间会额外引入约 1~2 ULP 的计算误差;对于极大输入,直接计算 u ≈ 2|x| 还可能出现溢出风险,导致 Asinh 算子三方精度测试不通过。
u ≈ 2|x|
• 昇腾硬件型号:Ascend 950(arch35) • 涉及数据类型:FP32、FP16、BF16
根据输入绝对值进行分段计算:
|x| < 10
log1p
10 <= |x| < 2^28
log(u)
|x| >= 2^28
log(|x|) + ln(2) + 1 / |x|^2
修改后 Asinh 算子的 FP32、FP16、BF16 三方精度测试应全部通过。
💡 备注(选填)
关联 PR: https://gitcode.com/cann/ops-math/pull/4822
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
一、问题描述 (必填)
Asinh 算子 arch35 实现对非小值统一使用
log(u) * r / (u - 1)进行精度补偿。该补偿方式在中大数值区间会额外引入约 1~2 ULP 的计算误差;对于极大输入,直接计算
u ≈ 2|x|还可能出现溢出风险,导致 Asinh 算子三方精度测试不通过。二、环境信息 (可选)
• 昇腾硬件型号:Ascend 950(arch35)
• 涉及数据类型:FP32、FP16、BF16
三、重现步骤 (可选)
四、预期结果 (可选)
根据输入绝对值进行分段计算:
|x| < 10:保留原有log1p补偿路径,保证小值精度;10 <= |x| < 2^28:直接使用log(u),避免额外乘除引入精度误差;|x| >= 2^28:使用log(|x|) + ln(2) + 1 / |x|^2渐近式,避免溢出;修改后 Asinh 算子的 FP32、FP16、BF16 三方精度测试应全部通过。
💡 备注(选填)
关联 PR:
https://gitcode.com/cann/ops-math/pull/4822