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

时间:2015-06-07 18:19:26

标签: c++ c math floating-point

int main() {
    double inf = INFINITY;
    double pi = acos(-1.0);
    printf("[1]: %f %f\n", atan(inf) / pi, atan(-inf) / pi);
    printf("[2]: %f %f\n", tan(inf) / pi, tan(-inf) / pi);
    return 0;
}

输出

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

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

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

1 个答案:

答案 0 :(得分:4)

两者都是明确定义的行为。 引自http://en.cppreference.com

  • 黄褐色

      

    如果参数为±0,则不加修改地返回       如果参数为±∞,则返回NaN并引发FE_INVALID       如果参数是NaN,则返回NaN。

  • 反正切

      

    如果参数为±0,则不加修改地返回       如果参数为+∞,则返回+π/ 2       如果参数为-∞,则返回-π/ 2       如果参数是NaN,则返回NaN。