xiv*_*r77 4 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;
}
Run Code Online (Sandbox Code Playgroud)
产出
[1]: 0.500000 -0.500000
[2]: -nan -nan
Run Code Online (Sandbox Code Playgroud)
标准是否定义了这种行为?是[2]未定义的行为吗?未指定?
我想确定至少[1]是一个有保证的结果。
两者都是定义明确的行为。引用自http://en.cppreference.com
棕褐色
如果参数为 ±0,则返回未修改。
如果参数为 ±?,则返回 NaN 并引发 FE_INVALID。
如果参数是 NaN,则返回 NaN。
晒黑
如果参数为 ±0,则返回未修改。
如果参数是 +?,则返回 +?/2。
如果参数是 -?,则返回 -?/2。
如果参数是 NaN,则返回 NaN。