在32位和64位進行整數數學運算的最佳方法是什么,以便像C語言一樣發(fā)生溢出?例如(65536 * 65536 + 1)*(65536 * 65536 + 1)在64位數學運算中應為0x0000000200000001,而不是其確切值(不溢出)0x10000000200000001。
2 回答

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
使用具有適當整數大小的NumPy,并且溢出更多為C,例如:
32位:
>>> np.uint32(2**32-3) + np.uint32(5)
__main__:1: RuntimeWarning: overflow encountered in uint_scalars
2
64位:
>>> i64=np.uint64(65536*65536+1)
>>> hex(i64*i64)
'0x200000001L'
與Python的本地int進行比較:
>>> hex((65536*65536+1)*(65536*65536+1))
'0x10000000200000001L'
您可以看到NumPy正在按照您的意愿進行。
添加回答
舉報
0/150
提交
取消