Io userei la stessa tecnica di ale, però con una macro:
- Codice: Seleziona tutto
#define SGN(x) ( ((x) < 0) ? -1 : ( ((x) == 0 ) ? 0 : 1) )
che funziona con float, double, interi & c., e ti evita anche di fare una chiamata di funzione.
la funzione valore assoluto esiste in math.h e si chiama fabs(), comunque eviterei la formula di steej perché è leggermente più pesante (richiede una divisione) e perché comunque andrebbe gestito a parte il caso x==0 per cui x/abs(x) non è definita e all'atto pratico generebbe un errore di divisione per zero.
Poi vabbè, a meno che non dobbiate fare programmi pesantissimi potete anche fregarvene di tutte queste paranoie sulla complessità computazionale