AS3 Реализация верхней степени двух алгоритмов - PullRequest
1 голос
/ 02 марта 2011

Я пытался реализовать алгоритм округления до 2, описанный в следующей ссылке в AS3.

http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2

public static function upperPowerOfTwo(num:uint):uint
{
//  if(num == 1) return 2;

    num--;
    num |= num >> 1;
    num |= num >> 2;
    num |= num >> 4;
    num |= num >> 8;
    num |= num >> 16;

    num++;

    return num;
}

Алгоритм прекрасно работает для большинствазначения, которые я проверял.Упоминается, что это вернет 0, когда задано входное значение 0, что технически неверно, но я согласен с этим выводом.То, с чем я не в порядке, когда я получаю ввод 1, я получаю и вывод 1.

Я думаю, что это должно быть предостережение от AS3 и его вялой реализации Uint, но я не могучтобы понять это.Я также пытался использовать оператор логического сдвига >>> для того же результата.

Мой C немного ржавый, но я не уверен, как это могло бы даже вернуть 2 в C. Может кто-нибудь объяснить мнечто здесь не так?Я предполагаю, что если бы ввод 1 был особым случаем, он был бы упомянут в приведенной выше ссылке.

1 Ответ

2 голосов
/ 02 марта 2011

В чем проблема?1 - это степень 2: она равна 2 ^ 0.Алгоритм работает как рекламируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...