调整浮子以保持高精度

时间:2013-01-29 14:55:43

标签: python floating-point precision floating-accuracy floating-point-precision

我正在编写一些需要非常高精度的Python代码。我开始使用Numpy float64,但是没有按要求工作,然后我开始使用“Decimal”模块,然后工作正常。

然而,理想情况下,我会更喜欢使用浮点数而不是使用十进制模块 - 我记得有人曾经告诉我,有可能以某种方式操纵浮点数以便达到精度水平(通过乘法或其他东西? )。

这是真的还是我记错了?对不起,如果这有点模糊。

谢谢!

2 个答案:

答案 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')