What's the best way to do integer math in 32- and 64-bit, so that overflow happens like it does in C?
eg (65536*65536+1)*(65536*65536+1) should be 0x0000000200000001 in 64-bit math, and not its exact value (non-overflowing) 0x10000000200000001.
只是&
使用适当的32位或64位掩码( 0xffffffff
或0xffffffffffffffff
)的结果。
Use NumPy with the appropriate integer size and the overflow is more C like:
32 bit:
>>> np.uint32(2**32-3) + np.uint32(5)
__main__:1: RuntimeWarning: overflow encountered in uint_scalars
2
64 bit:
>>> i64=np.uint64(65536*65536+1)
>>> hex(i64*i64)
'0x200000001L'
Compare with Python's native int:
>>> hex((65536*65536+1)*(65536*65536+1))
'0x10000000200000001L'
You can see that NumPy is doing as you desire.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.