MATH_ERRNO宏
概要:
#define MATH_ERRNO 1
描述:
该宏会扩展为整型常量1,用于测试宏math_errhandling值,以确定数学函数是否通过errno报告错误。
ISO/IEC 9899:2018标准第7.12.1 Treatment of error conditions节规定了数学函数错误情况的处理,归纳如下表所示:
宏 | 错误 | 处理 |
MATH_ERRNO | 域错误(domain error):当且仅当输入参数不在数学函数定义的域内时,才会发生域错误,例如:sqrt(-5.0)。 |
errno设置为EDOM。①⑤ |
极点错误(pole error):也称奇点或者无穷大,当且仅当有限参数接近极限时,数学函数将具有无限结果,从而发生极点错误,例如:log(0.0)。 |
errno设置为ERANGE。①⑤ | |
溢出(overflow):如果数学函数的结果是有限的,但太大,指定类型如果没有异常舍入就无法表示该结果,这时会发生溢出,例如:exp(1000.0)。 |
errno设置为ERANGE。①⑤ | |
下溢(underflow):如果数学函数的结果是有限的,但太小,指定类型如果没有异常舍入就无法表示该结果,这时会发生下溢,例如:exp(-1000.0)。 |
errno设置为ERANGE。③⑤ | |
MATH_ERREXCEPT | 域错误(domain error):当且仅当输入参数不在数学函数定义的域内时,才会发生域错误,例如:sqrt(-5.0)。 |
引发浮点异常FE_INVALID。② |
极点错误(pole error):也称奇点或者无穷大,当且仅当有限参数接近极限时,数学函数将具有无限结果,从而发生极点错误,例如:log(0.0)。 |
引发浮点异常FE_DIVBYZERO。② | |
溢出(overflow):如果数学函数的结果是有限的,但太大,指定类型如果没有异常舍入就无法表示该结果,这时会发生溢出,例如:exp(1000.0)。 |
引发浮点异常FE_OVERFLOW。② | |
下溢(underflow):如果数学函数的结果是有限的,但太小,指定类型如果没有异常舍入就无法表示该结果,这时会发生下溢,例如:exp(-1000.0)。 |
引发浮点异常FE_UNDERFLOW。④ |
①如果表达式(math_errhandling & MATH_ERRNO)是非0值,errno将被设置为与错误对应的值。
②如果表达式(math_errhandling & MATH_ERREXCEPT)是非0值,将引发对应的浮点异常。
③如果表达式(math_errhandling & MATH_ERRNO)是非0值,errno是否设置为ERANGE将由实现定义。
④如果表达式(math_errhandling & MATH_ERREXCEPT)是非0值,是否引发浮点异常FE_UNDERFLOW将由实现定义。
⑤如果发生域错误、极点错误、溢出或者下溢,并且表达式(math_errhandling & MATH_ERRNO)值等于0,errno应设置为与错误对应的值或者保持不变。
如果没有发生上述错误,无论math_errhandling如何设置,errno都应保持不变。
范例:
|
|
输出:
errno is set to ERANGE.
注:使用Visual Studio编译。
相关内容:
MATH_ERREXCEPT | 表示通过引发浮点异常报告错误的宏。 |
math_errhandling | 表示通过errno和引发浮点异常报告错误的宏。 |