Я хотел бы получить знак значения float
как значение int
-1 или 1.
Избегание условностей всегда является хорошей идеей в сокращении вычислительных затрат. Например, одним из способов, я могу думать, было бы использовать быстрый bit-shift
для получения знака:
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.
Или более кратко:
int sign = (~(a >> 31) << 1) - 1;
- Это похоже на хороший подход?
- Будет ли это работать для всех платформ, учитывая проблемы, связанные с контентом (как MSB имеет знак)?