Quali operazioni e funzioni su +0.0 e -0.0 danno risultati aritmetici diversi?

In C, quando è supportato ±0.0 , -0.0 o +0.0 assegnati a un double solito non fa alcuna differenza aritmetica . Sebbene abbiano pattern di bit diversi, essi si confrontano in modo aritmetico come uguali.

 double zp = +0.0; double zn = -0.0; printf("0 == memcmp %d\n", 0 == memcmp(&zn, &zp, sizeof zp));// --> 0 == memcmp 0 printf("== %d\n", zn == zp); // --> == 1 

Ispirato da un commento @Pascal Cuoq , sto cercando alcune altre funzioni in C standard che forniscono risultati aritmeticamente diversi.

Nota: molte funzioni, come sin() , restituiscono +0.0 da f(+0.0) e -0.0 da f(-0.0) . Ma questi non forniscono risultati aritmetici diversi. Anche i 2 risultati non dovrebbero essere entrambi NaN .