Есть положительный float f, надо найти такое наименьшее n, что f <= 2^n. Я так понимаю, это можно сделать следующим образом: UINT a = ceil(f); int n = 32 - nlz(a); if ( a == ( 1 << (n-1) ) ) n--; где nlz(x) - это количество ведущих нулевых битов в двоичном представлении. Вопрос: как реализовать nlz на x86? Ну либо ещё проще решить поставленную задачу=)
можно проще смотрим формат http://babbage.cs.qc.edu/IEEE-754/Decimal.html смотрим экспоненту у нормализованного значения отнимаем bias = 127 и прибавляем 1 получили n , что f < 2^n
Если мантисса равна нулю, то единицу не прибавляем и f = 2^n ) Ок, а если у нас первоначально не float, а unsigned int?
>> Если мантисса равна нулю, то единицу не прибавляем и f = 2^n ) как вариант можно отнимать FLT_EPSILON перед сравненим... хотя это не очень чисто >> если у нас первоначально не float, а unsigned int? bsr для ц от мс unsigned char _BitScanReverse( unsigned long * Index, unsigned long Mask );