[python крут] деление с округлением вверх

Serab

Только сегодня узнал. Вот в плюсах там всяких целочисленное деление с округлением вверх выглядит так

// b > 0
int ceiling_div(int a, int b)
{
return (a + b - 1) / b;
}

В питоне тоже можно так, но можно и по-другому, если знать, как там округление происходит.
Спойлер:

Еще и работает для всех b != 0.
Имхо, круто.

apl13

И ч0?
Количество инструкций одинаковое.
Вдобавок, в питоне нужно ожидать результата деления, это еще усложнит планирование, чего доброго.

Serab

И ч0?
Количество инструкций одинаковое.
пох на количество инструкций, выглядит кроссиво и понятнее, имхо (не настаиваю на объективности).
Вдобавок, в питоне нужно ожидать результата деления
WAT

apl13

Ну второй минус-то уже от частного берется.
В сях деление последним делается, запланировал и забыл.

apl13

выглядит кроссиво и понятнее
Чем ты мерял кроссату. :book: :spy:

Serab

Чем ты мерял кроссату.
т.е. с понятностью все понятно? :o

Serab

Чувак, это питончик :grin:
Ну т.е. он и так будет тормозить немножко (например, в x86 нету такого математического целочисленного деления с округлением вниз, насколько я знаю)

NAIL

http://php.net/ceil - выглядит красиво и понятнее!

Serab

PHP
можно не в этом треде? спасибо пожалуйста

serega1604

я правильно понимаю, что эта крутость работает только для неотрицательных чисел?

apl13

т.е. с понятностью все понятно? :o
Нуахуле! :rambo: :mafia:

apl13

Ну почему, по идее-то для всех.

bleyman

> return -(-a // b)
> выглядит кроссиво и понятнее
> return -(-a // b)
> выглядит кроссиво и понятнее

Serab

не, ну серьезно, эта идиома с врезанием минуса же часто в математике встречается, всякие там max(f(x = -min(-f(x. Поэтому если ты знаешь, что a//b округляет результат обязательно в меньшую сторону, то -(-a//b) округлит в большую, тут думать особо не надо. А название функции подсказывает, что она должна делать, так что гадать замысел программиста тоже не приходится.

procenkotanya

-(-a//b)
Только вот минус у тебя тут (и в начале темы) лажово врезан.

Serab

поясни

procenkotanya

Порядок операций зацени. Деление-минус-минус.

Serab

no way. унарный минус приоритетнее деления.
просто запусти питон и проверь, если бы было так, то -3 / 2 было бы равно -1

procenkotanya

$ python
Python 2.6.2 (r262:71600, Oct 3 2009, 01:53:56)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=2
>>> b=3
>>> print(-(-a//b
1

Serab

ну, правильно 2/3 с округлением вверх — это единица :)

procenkotanya

шыт. действительно =)
Оставить комментарий
Имя или ник:
Комментарий: