我想在mpmath的一个mpf对象中加载一个非常大的十六进制数字。我试过了
from mpmath import mp, mpf
a = mpf('0x100') # starting small here
但它出现故障:
ValueError: could not convert string to float: '0x100'
简单地使用长整数常量似乎也会失去精度:
>>> mpf.prec = 300
>>> a = mpf( 0x123444444444444444444444444444444444444444444444444444444444444)
>>> print("%x"%a)
123444444444440000000000000000000000000000000000000000000000000
>>> a = mpf( 123444444444444444444444444444444444444444444444444444444444444)
>>> print("%d"%a)
123444444444444452865502098927835995454229086812688745177808896
从十六进制字符串初始化mpf实例的正确技巧是什么?
答案 0 :(得分:0)
Python通过使用前缀来理解十六进制;你几乎得到了它:只需删除引号:
a = mpf(0x100) # starting small here
现在中断的地方取决于你的数字有多大。如果它不适合Python整数,它会自动升级为一个长整数(长度是任意长度的(在Python 3中这是默认值)。因此它应该"只是工作"开箱即用,无需担心特殊数据类型。 你应该能够处理任何十六进制数,只要你有足够的内存。