标准的数学函数能正确处理无穷大吗?

Can the standard math functions handle infinity correctly?

本文关键字:正确处理 无穷大 函数 标准      更新时间:2023-10-16
int main() {
    double inf = INFINITY;
    double pi = acos(-1.0);
    printf("[1]: %f %fn", atan(inf) / pi, atan(-inf) / pi);
    printf("[2]: %f %fn", tan(inf) / pi, tan(-inf) / pi);
    return 0;
}

输出
[1]: 0.500000 -0.500000
[2]: -nan -nan

这种行为是由标准定义的吗?[2]是未定义行为吗?未指明的吗?

我想确保至少[1]是一个有保证的结果。

都是定义良好的行为。引用自http://en.cppreference.com

  • 如果参数为±0,则返回未经修改的值。
    如果参数为±∞,则返回NaN并引发FE_INVALID。
    如果参数为NaN,则返回NaN。

  • 每股

    如果参数为±0,则返回未经修改的值。
    如果参数为+∞,则返回+π/2。
    如果参数为-∞,则返回-π/2。
    如果参数为NaN,则返回NaN。