Mi piacerebbe avere il segno di un valore di float
come un valore int
di -1 o 1.Il modo più veloce per ottenere l'accesso a Java?
condizionali Evitare è sempre una buona idea nel ridurre costo computazionale. Per esempio, in un modo mi viene in mente sarebbe quella di utilizzare un digiuno bit-shift
per ottenere il segno:
float a = ...;
int sign = a >> 31; //0 for pos, 1 for neg
sign = ~sign; //1 for pos, 0 for neg
sign = sign << 1; //2 for pos, 0 for neg
sign -= 1; //-1 for pos, 1 for neg -- perfect.
O più conciso:
int sign = (~(a >> 31) << 1) - 1;
- Ti sembra un buon approccio?
- Funzionerà su tutte le piattaforme, data la preoccupazione dell'endianness (come MSB contiene il segno)?
Non sapevo questo. Probabilmente hai ragione anche sulle prestazioni. –
+1 È * stato * ottimizzato e può gestire casi come NaN ecc. – arshajii
Che dire di Integer.signum(), Long.signum(), ecc.? Non è necessario eseguire il cast al tipo di associato, quindi. –