0

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

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

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

谢谢!

4

2 回答 2

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)

如果有疑问,请按照 BenDundee 的建议坚持Decimal或使用。bigfloat

于 2013-01-29T15:17:52.210 回答
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')
于 2014-05-22T15:07:02.653 回答