Alasdair wrote: > I need to apply the ceiling function to arbitrary sized (long) integers. > However, division automatically returns the type of its operands, so that, > for example: math.ceil(7/4) returns 1. I can use float, as in: > math.ceil(7/float(4)), except that for very large integers float causes an > unacceptable loss of precision. > > What is the best way of finding a ceiling of a quotient of arbitrary sized > integers?
Use divmod() to get the quotient and the remainder at the same time. Add 1 to the quotient if and only the remainder is greater than 0. In [11]: def qceil(x, y): ....: """ Find the ceiling of a quotient x/y. ....: ....: This is especially useful for very large Python long integers. ....: """ ....: q, r = divmod(x, y) ....: if r > 0: ....: q += 1 ....: return q ....: In [13]: qceil(7, 4) Out[13]: 2 In [14]: qceil(8, 4) Out[14]: 2 In [15]: qceil(9, 4) Out[15]: 3 In [16]: qceil(100000000000000000000000003, 10) Out[16]: 10000000000000000000000001L -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco -- http://mail.python.org/mailman/listinfo/python-list