2

我想将一个非常大的十六进制数加载到 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 实例的正确技术是什么?

4

1 回答 1

0

Python 通过使用前缀来理解十六进制;你几乎明白了:只需删除引号:

a = mpf(0x100) # starting small here

现在这个中断取决于你的号码有多大。如果它不适合 Python 整数,它会自动升级为长整数(任意长度(在 Python 3 中这是默认值)。因此它应该“开箱即用”,无需担心关于特殊数据类型。你应该能够处理任何十六进制数,只要你有足够的内存。

于 2016-04-22T16:41:43.890 回答