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]
是有保证的结果。
答案 0 :(得分:4)
两者都是明确定义的行为。 引自http://en.cppreference.com
黄褐色
如果参数为±0,则不加修改地返回 如果参数为±∞,则返回NaN并引发FE_INVALID 如果参数是NaN,则返回NaN。
反正切
如果参数为±0,则不加修改地返回 如果参数为+∞,则返回+π/ 2 如果参数为-∞,则返回-π/ 2 如果参数是NaN,则返回NaN。