Message75498
> It would be nicer if the OverflowError from _PyLong_NumBits
> were propagated, so that the second case raises OverflowError
> instead of giving an incorrect result
Why not, but I prefer your second proposition: return a long integer.
Attached patch implements this solution.
>>> x=1<<(2**31-1)
>>> n=x.numbits(); n, n.numbits()
(2147483648L, 32L)
>>> x<<=(2**31-1)
>>> n=x.numbits(); n, n.numbits()
(4294967295L, 32L)
>>> x<<=1
>>> n=x.numbits(); n, n.numbits()
(4294967296L, 33L) # yeah!
With my patch, there are two functions:
- _PyLong_NumBits(long)->size_t: may overflow
- long_numbits(long)->long: don't raise overflow error, but may raise
other errors like memory error |
|
Date |
User |
Action |
Args |
2008-11-04 18:16:00 | vstinner | set | recipients:
+ vstinner, loewis, rhettinger, terry.reedy, mark.dickinson, fredrikj |
2008-11-04 18:16:00 | vstinner | set | messageid: <1225822560.71.0.903135284864.issue3439@psf.upfronthosting.co.za> |
2008-11-04 18:15:59 | vstinner | link | issue3439 messages |
2008-11-04 18:15:59 | vstinner | create | |
|