Показать сообщение отдельно
Старый 07.02.2007, 11:29   #20
N.O.T.
AnyKey`щик
 
Регистрация: 07.02.2007
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Любопытные формулы

Нужно было догнать любое число до первого большего с основанием 2 в N-степени, пример: если число 31, то резалт должен быть 32, если 257, то 512 и т.д.
Сначала написал, чтоб посмотреть будет ли ваще програ раобтать простым циклом:
while(true)
{
static int iIter = 1;
if( iLabelWidth > iIter )
iIter = iIter << 1;
else
{
iLabelWidth = iIter;
break;
}
}
потом начал придумывать как моно сделать запись короче, придумал:
// fIn - вход. число
// получаем степень
float stepen = log10((float)fIn)/ log10(2.0f);
int res = pow(2, ((floor(stepen)+1)));
Результат при сравнении на быстродействие:
на 10 млн. итераций выполняется за 9284 мск, против первого(обычным циклом) за 50 мск.
Так что оставил первый. Может кто-то лучше напишет, вставлю себе.
(Offline)
 
Ответить с цитированием