You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带可去奇点的函数浮点实现:潜在异常值排查问询

函数实现的漏洞值分析

给定的整函数定义:

  • 当x>0时,ƒ(x) = sin(sqrt(x)) / sqrt(x)
  • 当x=0时,ƒ(x) = 1
  • 当x<0时,ƒ(x) = sinh(sqrt(-x)) / sqrt(-x)

当前类C实现存在以下会导致运行异常或结果错误的输入值:

1. 无穷大输入(+∞/-∞)

  • 输入x=+∞:q = sqrt(fabs(+∞)) = +∞,sin(+∞)的结果为NaN,最终计算sin(q)/q得到NaN/∞ = NaN。但原函数当x→+∞时,sin(sqrt(x))始终在[-1,1]区间,除以趋近+∞的sqrt(x)后极限应为0,此处返回NaN属于结果错误。
  • 输入x=-∞:q = sqrt(fabs(-∞)) = +∞,sinh(+∞) = +∞,计算sinh(q)/q得到∞/∞ = NaN。但原函数当x→-∞时,sinh(sqrt(-x)) ≈ e^{sqrt(-x)}/2,除以sqrt(-x)后趋近+∞,此处返回NaN属于结果错误。

2. NaN输入

当x为NaN时,x*x == 0的判断结果为false,后续x>0的判断也为false,最终进入sinh(q)/q分支。由于sqrt(fabs(NaN)) = NaN,sinh(NaN) = NaN,最终结果为NaN/NaN = NaN。虽然数学上函数在NaN处应返回NaN,但部分浮点环境下可能因NaN的传播触发未定义行为,且实现未显式兼容NaN输入,属于潜在风险点。

3. 极小非正规数(Subnormal Numbers)

对于极小的非零正/负非正规数,x*x会下溢到0,触发return 1 - x/6分支。虽然该分支结果是函数泰勒展开的前两项近似,精度尚可,但严格来说此时x≠0却进入了x=0的处理分支,属于逻辑不一致。不过该情况不会导致运行崩溃,仅存在精度和逻辑瑕疵。


内容的提问来源于stack exchange,提问作者emacs drives me nuts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:12:38