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

C语言中EDOM与ERANGE的区别及触发操作技术问询

区分EDOM和ERANGE的错误场景

核心区别

  • EDOM:定义域错误——输入参数完全不在函数的合法处理范围内,函数无法执行有效计算。
  • ERANGE:范围错误——输入参数在函数定义域内,但计算结果超出当前数据类型的可表示范围,或结果是无穷/NaN这类无效数值。

触发EDOM的常见操作

  • 数学函数接收完全超出定义域的参数:
    • 调用acos(1.1):acos的合法输入是[-1, 1],1.1不在此区间内
    • 调用sqrt(-3):平方根函数仅能处理非负数,负数输入直接触发错误
    • 调用log(-1.5):对数函数的定义域是正数,负数输入不被允许

触发ERANGE的常见操作

  • 计算结果超出数据类型的取值上限:
    • 调用exp(1000):指数函数结果过大,超出double类型的最大值范围
  • 结果趋近于无穷或极点:
    • 调用log(0.0):对数函数在0处的极限是负无穷,属于超出有效数值范围
    • 调用tan(M_PI/2):正切函数在π/2处趋近于正无穷,触发错误
  • 数值下溢(结果过小无法被当前类型表示):
    • 计算极小的数值,小到低于double类型能表示的最小正数值时,也会触发ERANGE

对应你的示例代码

acos(+1.1)的输入超出acos的合法定义域,因此errno被设为EDOM;log(0.0)的输入在对数函数的定义域边界,但计算结果是负无穷,超出有效数值范围,因此errno被设为ERANGE。

内容的提问来源于stack exchange,提问作者Tong Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:35:12