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; }salidas
[1]: 0.500000 -0.500000 [2]: -nan -nan ¿Este comportamiento está definido por la norma? ¿Es [2] un comportamiento indefinido? sin especificar?
Quiero estar seguro de que al menos [1] es un resultado garantizado.
Ambos son comportamientos bien definidos. Citando de http://en.cppreference.com
broncearse
Si el argumento es ±0, se devuelve sin modificar.
Si el argumento es ±∞, se devuelve NaN y se genera FE_INVALID.
Si el argumento es NaN, se devuelve NaN.
un bronceado
Si el argumento es ±0, se devuelve sin modificar.
Si el argumento es +∞, se devuelve +π/2.
Si el argumento es -∞, se devuelve -π/2.
Si el argumento es NaN, se devuelve NaN.