我正在编写一些需要非常高精度的 Python 代码。我开始使用 Numpy float64,但这并没有按要求工作,然后我开始使用“十进制”模块,然后工作正常。
但是,理想情况下,我更喜欢使用浮点数而不是使用小数模块 - 我记得有人曾经告诉我,可以以某种方式操纵浮点数,以便可以达到精度水平(通过乘法或其他方式?)。
这是真的还是我记错了?对不起,如果这有点模糊。
谢谢!
我正在编写一些需要非常高精度的 Python 代码。我开始使用 Numpy float64,但这并没有按要求工作,然后我开始使用“十进制”模块,然后工作正常。
但是,理想情况下,我更喜欢使用浮点数而不是使用小数模块 - 我记得有人曾经告诉我,可以以某种方式操纵浮点数,以便可以达到精度水平(通过乘法或其他方式?)。
这是真的还是我记错了?对不起,如果这有点模糊。
谢谢!
这取决于您拥有的号码类型。例如,如果您在区间中添加值,则[1...2)
最好使用 offsettet 值:
>>> a = 1.0000000000000000001
>>> a
1.0
>>> a+a
1.0
>>> a = 0.0000000000000000001
>>> a
1e-19
为了更简单的存储,您可以将它们写为元组(n, f)
,其中 n 是自然数 (int) 和f
区间中的分数[0...1)
。
然而,使用这种值进行计算是很棘手的。
>>> (1+1, a+a)
(2, 2e-19)
如果有疑问,请按照 BenDundee 的建议坚持Decimal
或使用。bigfloat
另一个有用的包是mpmath
:
import mpmath as mp
p.dps = 64 #64 decimal places
msqrt(3)/2
mpf('0.8660254037844386467637231707529361834714026269051903140279034897246')
p.dps = 30 #30 decimal places
mpf('0.866025403784438646763723170752918')