si può solo fare capovolta divisione piano:
def ceildiv(a, b):
return -(-a // b)
Questo funziona perché Python's division operator does floor division (a differenza di C, in cui divisione intera tronca la parte frazionaria).
Questo funziona anche con i grandi numeri interi di Python, poiché non vi è alcuna (perdita) conversione in virgola mobile.
Ecco una dimostrazione:
>>> from __future__ import division # a/b is float division
>>> from math import ceil
>>> b = 3
>>> for a in range(-7, 8):
... print(["%d/%d" % (a, b), int(ceil(a/b)), -(-a // b)])
...
['-7/3', -2, -2]
['-6/3', -2, -2]
['-5/3', -1, -1]
['-4/3', -1, -1]
['-3/3', -1, -1]
['-2/3', 0, 0]
['-1/3', 0, 0]
['0/3', 0, 0]
['1/3', 1, 1]
['2/3', 1, 1]
['3/3', 1, 1]
['4/3', 2, 2]
['5/3', 2, 2]
['6/3', 2, 2]
['7/3', 3, 3]
"divide-then-ceil" in realtà non è una cosa comune in matematica, mentre '' // si basa sul funzionamento integer divisione-con-modulo. – millimoose
Importante: vuoi un risultato int o float? – smci
È necessario modificare la risposta accettata a dlitz. math.ceil è per i float, non funziona con i long-in a precisione arbitraria di Python. – endolith