powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Степень двойки
15 сообщений из 15, страница 1 из 1
Степень двойки
    #37953468
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, щас турнир пишу. Ну, там пары мемберов сражаются, и один из них вылетает.
Допустим, подписались на турнир 12 человек, а ближайшая степень двойки - 8, или 33 человека, а ближайшая - 32.
Сделал просто, pow(2,floor(log($count,2))), но что-то мне подсказывает, что можно сделать лучше. :)
...
Рейтинг: 0 / 0
Степень двойки
    #37953480
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1<<floor(log($count,2))
вот так?
...
Рейтинг: 0 / 0
Степень двойки
    #37953482
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шогал1<<floor(log($count,2))
вот так?
Чё-то я не въехал (м.б., немного в нетрезвом состоянии души). А поподробнее можно?
...
Рейтинг: 0 / 0
Степень двойки
    #37953492
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логарифм можно попробовать ускорить, если считать его в цикле:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
function log2($x){ // при условии что $x целочисленная положительная
  $i = 0;
  while($x){
    $i++;
    $x >>= 1;
  }
  return $i - 1;
}


честно говоря, не знаю, будет ли при этом ускорение в PHP, скорее всего настолько незначительно, что можно забить.
...
Рейтинг: 0 / 0
Степень двойки
    #37953493
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне моё скромное имхо подсказывает, что если взять двоичное представление числа, а потом прибить всё, кроме самой первой единицы - получится самое то. Это так? А как это лучше всего сделать?
...
Рейтинг: 0 / 0
Степень двойки
    #37953494
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeШогал1<<floor(log($count,2))
вот так?
Чё-то я не въехал (м.б., немного в нетрезвом состоянии души). А поподробнее можно?
Битовый сдвиг
...
Рейтинг: 0 / 0
Степень двойки
    #37953501
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeМне моё скромное имхо подсказывает, что если взять двоичное представление числа, а потом прибить всё, кроме самой первой единицы - получится самое то. Это так? А как это лучше всего сделать?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
function kill_zeros($x){
  $i = 0;
  while($x){
    $i++;
    $x >>= 1;
  }
  return 1<<($i-1);
}


такой вариант пойдёт?
...
Рейтинг: 0 / 0
Степень двойки
    #37953504
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, скажем, $count=17, а как получить результат (16, то есть)?
...
Рейтинг: 0 / 0
Степень двойки
    #37953508
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем первоначальный вариант не нравится?)
...
Рейтинг: 0 / 0
Степень двойки
    #37953509
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шогал,

Имеется, однако, некоторая тонкость - логарифмы и степени в пхп реализованы таки нативно, а вот на пхп писать цикл - фиг его знает.
Может, как-нибудь с помощью булевых (или не знаю каких) операций прибить эти самые двоичные единички?
...
Рейтинг: 0 / 0
Степень двойки
    #37953511
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettчем первоначальный вариант не нравится?)
Это какой?
Имхо, самое правильное - просто прибить все единички (кроме первой), что в двоичном представлении числа. Вот, как это правильно сделать?
...
Рейтинг: 0 / 0
Степень двойки
    #37953514
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeHettчем первоначальный вариант не нравится?)
Это какой?
Имхо, самое правильное - просто прибить все единички (кроме первой), что в двоичном представлении числа. Вот, как это правильно сделать?
А как сделать это без цикла, если зараннее не знать, сколько именно прибивать?)
...
Рейтинг: 0 / 0
Степень двойки
    #37953519
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ШогалА как сделать это без цикла, если зараннее не знать, сколько именно прибивать?)
Не знаю.
На самом деле, для использования, мне и степень в логарифме сойдёт, но, как-то, не правильно это. Потому что должно быть какое-то очень простое (до смешного простое) решение. Нутрём чувствую.
...
Рейтинг: 0 / 0
Степень двойки
    #37953523
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
bindec(preg_replace('#(?<!^)1#', '0', decbin($count)))
...
Рейтинг: 0 / 0
Степень двойки
    #37953527
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

Код: php
1.
1 << sqrt($count); // можно без intval()
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Степень двойки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]