How to simulate C style integer division?

Grobu snailcoder at retrosite.invalid
Sat Jan 23 07:04:20 EST 2016


On 22/01/16 04:48, Steven D'Aprano wrote:
[ ... ]

>> math.trunc( float(a) / b )
>
>
> That fails for sufficiently big numbers:
>
>
> py> a = 3**1000 * 2
> py> b = 3**1000
> py> float(a)/b  # Exact answer should be 2
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> OverflowError: long int too large to convert to float
>
>
> Note that Python gets the integer division correct:
>
> py> a//b
> 2L
>
>
> And even gets true division correct:
>
> py> from __future__ import division
> py> a/b
> 2.0
>
>
> so it's just the intermediate conversion to float that fails.
>

Thanks! I did see recommandations to avoid floats throughout the thread, 
but didn't understand why.

Following code should be exempt from such shortcomings :

def intdiv(a, b):
     return (a - (a % (-b if a < 0 else b))) / b





More information about the Python-list mailing list