我正在编写一些需要非常高精度的Python代码。我开始使用Numpy float64,但是没有按要求工作,然后我开始使用“Decimal”模块,然后工作正常。
然而,理想情况下,我会更喜欢使用浮点数而不是使用十进制模块 - 我记得有人曾经告诉我,有可能以某种方式操纵浮点数以便达到精度水平(通过乘法或其他东西? )。
这是真的还是我记错了?对不起,如果这有点模糊。
谢谢!
答案 0 :(得分:2)
这取决于你拥有的号码种类。例如,如果要在区间[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)
如果有疑问,请坚持Decimal
或使用BenDundee建议的bigfloat
。
答案 1 :(得分:0)
另一个有用的包是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')