在python中处理非常小的数字

arc*_*pus 8 python

我目前正在使用我的python程序中的非常小的数字,例如

x = 200 + 2e-26
Run Code Online (Sandbox Code Playgroud)

一种解决方案是使用对数值,这将增加我的浮点值的范围.问题是我必须使用这些值进行fft,因此使用对数方法是不可用的(并且Decimal也不使用-module).有没有其他方法可以解决这个问题?

编辑:我的decimal模块问题是:我如何处理虚数值?我试过a = Decimal(1e-26)+Decimal(1e-26*1j)a = Decimal(1e-26)+Decimal(1e-26)*1j,以及两种方式失败(应要求提供误差).

Aar*_*lla 2

虽然numpy支持更多的十进制类型(以及复杂的版本),但它们没有帮助:

>>> import numpy
>>> numpy.longfloat
<type 'numpy.float128'>
>>> a = numpy.array([200, 2e-26], dtype=numpy.longfloat)
>>> a
array([ 200.0,  2e-26], dtype=float128)
>>> a.sum()
200.0
>>> a = numpy.array([200, 2e-26], dtype=numpy.longdouble)
>>> a.sum()
200.0
Run Code Online (Sandbox Code Playgroud)

原因如下:在内部,numpy使用 80 位,这意味着 63 位尾数,仅支持 63/3 = 21 位。

您需要的是真正的 128 位浮点类型,例如 boost 中的浮点类型

尝试使用可能允许您访问此类型的Boost.Python模块。如果这不起作用,那么您必须用 C++ 编写自己的包装类,如此处所述