Handling very small numbers in python

前端 未结 2 1766
故里飘歌
故里飘歌 2021-02-14 17:56

I am currently working with very small numbers in my python program, e.g.

x = 200 + 2e-26

One solution is to work with logarithmic values whic

相关标签:
2条回答
  • 2021-02-14 18:18

    While numpy supports more decimal types (and also complex versions), they don't help:

    >>> 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
    

    The reason is explained here: Internally, numpy uses 80 bits which means 63 bits mantissa which just supports 63/3 = 21 digits.

    What you need is a real 128bit float type like the one from boost.

    Try the Boost.Python module which might give you access to this type. If that doesn't work, then you'll have to write your own wrapper class in C++ as explained here.

    0 讨论(0)
  • 2021-02-14 18:34

    Consider trying out the mpmath package.

    >>> from mpmath import mpf, mpc, mp
    >>> mp.dps = 40
    >>> mpf(200) + mpf(2e-26) + mpc(1j)
    mpc(real='200.0000000000000000000000000200000000000007', imag='1.0')
    

    Mostly accurate and can handle complex numbers, more details in the documentation.

    0 讨论(0)
提交回复
热议问题