Originariamente inviato da starcraftworld
Beh ad esempio la signbit() ho visto che mi ritorna 0 se il numero è non negativo, ma se è negativo ritorna 512...perchè?
La documentazione dice:
The signbit() macro returns nonzero if the sign of x is negative; otherwise it returns zero.
Per cui qualunque valore diverso da zero indica che il numero è negativo; quel 512 probabilmente deriva da un'operazione di and binario sul bit del segno.

In ogni caso, signbit funziona solo sui tipi in virgola mobile, e non è standard C++, ma C99.

Ribadisco, in C++ ti puoi scrivere una funzione del genere in questa maniera:
codice:
template<typename T>
T sign(T In)
{
    if(In>(T)0)
        return 1;
    else if(In<(T)0)
        return -1;
    return 0;
}
Il compilatore dovrebbe essere sufficientemente furbo da ottimizzare questa roba in maniera adeguata.